C# 无法修改asp vNext中HttpResponse对象的原因短语

C# 无法修改asp vNext中HttpResponse对象的原因短语,c#,asp.net,asp.net-core,http-response-codes,C#,Asp.net,Asp.net Core,Http Response Codes,我必须在我的asp 5中间件中设置原因短语,而不仅仅是http响应消息的状态代码,但我找不到任何方法。 Microsoft.AspNet.Http.HttpResponse类的StatusCode属性是一个int属性,仅用于修改状态代码,而不用于修改原因文本 我理解,原因是根据状态代码自动设置的,但在我的情况下,我必须将其设置为自定义值。根据以下说明,哪一项是可以的: […]此处列出的原因短语仅为建议——它们可以被本地等价物替换,而不会影响协议。[……] 我目前正在使用asp 5框架的beta-

我必须在我的asp 5中间件中设置原因短语,而不仅仅是http响应消息的状态代码,但我找不到任何方法。
Microsoft.AspNet.Http.HttpResponse
类的
StatusCode
属性是一个
int
属性,仅用于修改状态代码,而不用于修改原因文本

我理解,原因是根据状态代码自动设置的,但在我的情况下,我必须将其设置为自定义值。根据以下说明,哪一项是可以的:

[…]此处列出的原因短语仅为建议——它们可以被本地等价物替换,而不会影响协议。[……]

我目前正在使用asp 5框架的beta-8版本。

试试这个

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Title = "Home Page";

        return View();
    }

    public ActionResult TestError() // id = error code 
    {
        return new HttpStatusCodeResult(301, "Your custom error text");
    }
}
现在检查
http://localhost:33470/home/Testerror

看看菲德勒 您可以尝试:

Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "some reason";

令人惊讶的是,它通过MVC6工作。问题是,我需要从一个标准的asp中间件来完成。我想我会深入研究MVC中间件本身的内部代码,找出它是如何设置原因短语的。我必须纠正自己。我将MVC框架更新为beta8,现在提到的HttpStatusCodeResult的构造函数不见了。它只有一个参数,状态代码为int。警告:
ReasonPhrase
在HTTP/2中不受支持。这就是为什么它隐藏在
IHttpResponseFeature
中。
public class BadRequestResult : HttpStatusCodeResult
{
    private readonly string _reason;

    public BadRequestResult(string reason) : base(400)
    {
        _reason = reason;
    }

    public override void ExecuteResult(ActionContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        context.HttpContext.Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = _reason;
        context.HttpContext.Response.StatusCode = StatusCode;
    }
}