Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Owin自托管WebApp无法满足HEAD请求_C#_Owin_Nancy - Fatal编程技术网

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
。太棒了!我会尝试一下,然后回到这里,以防我有一个积极的结果!我会尝试一下,如果我有一个积极的结果,我会回到这里