C# Owin自托管WebApp无法满足HEAD请求
我正在使用C# Owin自托管WebApp无法满足HEAD请求,c#,owin,nancy,C#,Owin,Nancy,我正在使用Microsoft.Owin.hosting.WebApp自托管一个web应用程序,但是在向服务器发出HEAD请求后,它抛出了一个500错误。尝试提取JSON文件时,错误更改为504 我见过很多解决方案,但没有一个适用于WebApp。如果使用NancyFX托管,我可以将AllowChunkedEncoding设置为false以使其正常工作。但是那 代码段: 调用浏览器或使用Fiddle都会导致故障: 我没有在这里添加Nancy模块实现,因为这不是解决问题的地方,因为我也想提供静态内
Microsoft.Owin.hosting.WebApp
自托管一个web应用程序,但是在向服务器发出HEAD
请求后,它抛出了一个500错误。尝试提取JSON文件时,错误更改为504
我见过很多解决方案,但没有一个适用于WebApp
。如果使用NancyFX托管,我可以将AllowChunkedEncoding
设置为false以使其正常工作。但是那
代码段:
调用浏览器或使用Fiddle都会导致故障:
我没有在这里添加Nancy模块实现,因为这不是解决问题的地方,因为我也想提供静态内容,但允许对其进行HEAD请求
有人知道如何使用自托管OWIN中的
HEAD
动词吗?我刚刚遇到了类似的问题。我了解到,头部方法的响应应该是相同的,以获得响应,但没有内容
以下是相关的RFC:
我的自托管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;
}
我刚刚遇到了类似的问题。我了解到,头部方法的响应应该是相同的,以获得响应,但没有内容 以下是相关的RFC: 我的自托管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启动类中,在映射任何其他中间件以使用新的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();
}
}
公共类启动
{
公共无效配置(IAppBuilder应用程序)
{
app.Use();
//您最初的startup类的其余部分都在这里
//app.UseWebApi()
//app.usesignal();
}
}
我在一个自托管信号器应用程序中遇到了类似的问题,其中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启动类中,在映射任何其他中间件以使用新的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();
}
}
公共类启动
{
公共无效配置(IAppBuilder应用程序)
{
app.Use();
//您最初的startup类的其余部分都在这里
//app.UseWebApi()
//app.usesignal();
}
}
您如何确保您的标题
响应集内容长度
正确?我打赌标题将不存在,而不是2
,因为您是如何编写的。如果您像以前一样返回StringContent
,它至少会具有正确的2
值。您如何确保头
响应正确设置内容长度?我打赌标题将不存在,而不是2
,因为您是如何编写的。如果您像以前一样返回StringContent
,它至少会有正确的2
。太棒了!我会尝试一下,然后回到这里,以防我有一个积极的结果!我会尝试一下,如果我有一个积极的结果,我会回到这里