我使用Microsoft.Owin.Hosting.WebApp
自行托管网络应用,但在向服务器发出HEAD
请求后,会引发500错误。尝试拉取JSON文件时,错误更改为504。
我见过很多解决方案,但没有适用于WebApp
。如果使用NancyFX托管,我可以将AllowChunkedEncoding
设置为false以使其正常工作。但那是doesn't seems like a good option。
代码段:
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
动词?
答案 0 :(得分:0)
我刚刚遇到了类似的问题。我了解到HEAD方法响应应该与GET响应相同但没有内容。
以下是相关的RFC:https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
示例我有自己托管的Web api应用程序:
EF6
答案 1 :(得分:0)
我对自托管的SignalR应用程序有一个类似的问题,其中HEAD请求导致应用程序崩溃并返回错误代码500。我发现的解决方案是编写一个自定义OWIN中间件层来拦截HEAD请求并返回代码200。 / p>
在您的项目中创建一个名为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();
}
}