我无法想到一个更好的标题,但我会详细解释这个场景。
我有一个由IIS托管的.Net Web API。
protected void Application_Start()
{
SwaggerConfig.Register();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
除了初始化Hangfire,CORS和web api之外,我还有OWIN,除了初始化Hangfire,CORS和web api之外没有其他功能。
public static void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
OAuthConfig.Config(app);
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("SSDeployment");
app.UseHangfireServer();
app.UseWebApi(System.Web.Http.GlobalConfiguration.Configuration);
app.Use(typeof(OwinLogging));
Log.Debug("Starting SSDeployment.IntakeService - OWIN Configuration set for WebApi ...");
}
这是有趣的地方。最初,在Configuration(IAppBuilder app)方法中,第一行是
HttpConfiguration config = new HttpConfiguration();
在另一个不相关的情况下,我的DelegatingHandlers类没有工作。我认为可能正在创建两个HttpConfiguration的内容,因此问题。
然后我决定使用在GlobalConfiguration中全局声明的相同HttpConfiguration,你可以在我粘贴的方法中看到...
GlobalConfiguration.Configuration
不知何故,这种变化似乎修复了DelegatingHandlers问题。然而,很快我的一些行为就被打破了。
在我创建新项目的POST之后,我总是返回201 Created响应,该响应添加了Location标头。为此,我使用Url.Link("ActionName", new {field = value}).
事情就是我得到了一个未实施的'异常。
当我回去并在OWIN中使用var config = new HttpConfiguration()
时它就可以了。我的DelegatingHandler也在工作。
有人能解释一下这里发生了什么吗?我还没有找到很多关于它的文档。为什么GlobalConfiguration.Configuration(一个HttpConfiguration对象)是全局的,但我不能在我的OWIN的启动类中使用它。
让我烦恼的是修复'一些不知道为什么修复的东西。射击空白不是我的事情:))
谢谢!