无法修改 asp vNext 中 HttpResponse 对象的原因短语
Could not modify reason phrase on HttpResponse object in asp vNext
我必须在我的 asp 5 中间件中设置原因短语,而不仅仅是 http 响应消息的状态代码,但我找不到任何方法来做到这一点。
Microsoft.AspNet.Http.HttpResponse
class的StatusCode
属性是一个int
属性,只修改状态码,不修改原因文本。
我明白,原因是根据状态代码自动设置的,但在我的情况下,我必须将其设置为自定义值。根据 HTTP RFC 2616:
这是可以的
[..] The reason phrases listed here are only recommendations -- they MAY be replaced by local equivalents without affecting the protocol. [..]
我目前正在使用 beta-8 版本的 asp 5 框架。
试试这个
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
然后看看 Fiddler
你可以试试:
Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "some reason";
一个 HttpStatusCodeResult
也 returns 一个原因可能看起来像:
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;
}
}
我必须在我的 asp 5 中间件中设置原因短语,而不仅仅是 http 响应消息的状态代码,但我找不到任何方法来做到这一点。
Microsoft.AspNet.Http.HttpResponse
class的StatusCode
属性是一个int
属性,只修改状态码,不修改原因文本。
我明白,原因是根据状态代码自动设置的,但在我的情况下,我必须将其设置为自定义值。根据 HTTP RFC 2616:
这是可以的[..] The reason phrases listed here are only recommendations -- they MAY be replaced by local equivalents without affecting the protocol. [..]
我目前正在使用 beta-8 版本的 asp 5 框架。
试试这个
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
然后看看 Fiddler
你可以试试:
Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "some reason";
一个 HttpStatusCodeResult
也 returns 一个原因可能看起来像:
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;
}
}