我正在将一个 ASP.NET Web API
应用程序迁移到 OWIN
。这并不是要使用 none OWIN
部署。所以 Global.asax
将被删除。 Global.asax
事件处理程序中有一些代码专门放在 Application_EndRequest
中,应该由 OWIN
处理。
我已经阅读了一些关于 OWIN
的文章并在互联网上进行了搜索,但无法确定如何完成。谁能描述一下如何做到这一点?
我的环境:
- Visual Studio 2015 RC
- .Net Framework 4.5
- Microsoft.AspNet.Cors.5.0.0
- Microsoft.AspNet.WebApi.5.2.3
- 微软.Owin.3.0.1
- Owin.1.0
更新:这是当前代码的一些部分
using System;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using ProjectX.Web.AppStart;
using ProjectY.Domain.Contracts;
namespace ProjectX.UI
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_EndRequest(object sender, EventArgs e)
{
var unitOfWork = DependencyResolver.Current.GetService(typeof(IUnitOfWork)) as IUnitOfWork;
unitOfWork.SaveChanges();
}
}
}
namespace ProjectY.Domain.Contracts
{
public interface IUnitOfWork
{
void SaveChanges();
IRepository<T> GetRepository<T>() where T : class, IEntity, IHistory;
IDbContext GetDbContext();
}
}
using ProjectY.Core.Repositories;
using ProjectY.Domain.Contracts;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectY.Core.UnitOfWork
{
public class UnitOfWork : IUnitOfWork
{
public UnitOfWork(IProjectYDbContextFactory contextFactory)
{
_context = contextFactory.GetContext();
}
public void SaveChanges()
{
if (_context == null)
throw new ApplicationException("Something wrong has been happened. _context must not be null.");
_context.SaveChanges();
}
}
}
最佳答案
我在更新一些遗留应用程序时偶然发现了这个问题。对于那些仍在寻找答案的人:您可以通过创建一个中间件来解决这个问题:
app.Use(async (context, next) =>
{
await next.Invoke().ConfigureAwait(false);
//Do stuff after request here!
var unitOfWork = DependencyResolver.Current.GetService(typeof(IUnitOfWork)) as IUnitOfWork;
unitOfWork.SaveChanges();
});
如果您需要更多地控制在请求处理管道中调用中间件的时间,您可以使用阶段标记。
关于asp.net - Application_EndRequest 的 OWIN 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31265073/