[英]Owin SelfHosted WebApp does not fulfill HEAD requests
我使用Microsoft.Owin.Hosting.WebApp
自托管一个Web应用程序,但是向服务器发出HEAD
请求后,它将引发500错误。 尝试提取JSON文件时,错误更改为504。
我见过许多解决方案,但没有一个适用于WebApp
。 如果使用NancyFX托管,则可以将AllowChunkedEncoding
设置为false以使其工作。 但这似乎不是一个好选择 。
程式码片段:
var options = new StartOptions("http://localhost:8080")
{
ServerFactory = "Microsoft.Owin.Host.HttpListener"
};
WebApp.Start<Startup>(options);
启动的实现:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}
我没有在这里添加Nancy Module实现,因为它不是解决问题的地方,因为我也想提供静态内容,但是允许HEAD请求。
有谁知道如何通过自托管OWIN为HEAD
动词提供服务?
我只是遇到了一个非常类似的问题。 我了解到HEAD方法的响应应该与GET响应相同, 但没有内容。
这是相关的RFC: https : //www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
我的自托管Web api应用程序具有以下示例:
[HttpHead]
[HttpGet]
[ResponseType(typeof(string))]
public HttpResponseMessage LiveCheck(HttpRequestMessage request)
{
HttpResponseMessage response;
response = request.CreateResponse(HttpStatusCode.OK);
if (request.Method == HttpMethod.Get)
{
response.Content = new StringContent("OK", System.Text.Encoding.UTF8, "text/plain");
}
return response;
}
我对自托管的SignalR应用有类似的问题,其中HEAD请求导致应用崩溃,并返回错误代码500。我发现的解决方案是编写一个自定义OWIN中间件层来拦截HEAD请求并返回代码200。
在您的项目中创建一个名为HeadHandler.cs
的新类
using Microsoft.Owin;
using System.Threading.Tasks;
namespace YourProject
{
public class HeadHandler : OwinMiddleware
{
public HeadHandler(OwinMiddleware next) : base(next)
{
}
public override async Task Invoke(IOwinContext context)
{
if (context.Request.Method == "HEAD")
{
context.Response.StatusCode = 200;
}
else
{
await Next.Invoke(context);
}
}
}
}
在OWIN Startup类中,在映射任何其他中间件以使用新的HeadHandler
中间件之前添加一行。
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Use<HeadHandler>();
//The rest of your original startup class goes here
//app.UseWebApi()
//app.UseSignalR();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.