sha*_*oth 14 .net c# asp.net-mvc-3
从我的MVC3控制器操作,我想返回HTTP 403,将"状态描述"设置为某个特定的字符串,并在结果内容中返回该字符串,以便在浏览器中可见.
我可以返回ContentResult指定内容,但不能指定状态代码(例如403)而不是状态描述.我可以HttpStatusCodeResult用来指定状态代码和状态描述,但不能指定结果内容.
如何制作包含所有三个的动作结果?
drc*_*rch 16
通常,您会通过设置响应代码然后返回常规ActionResult来完成此操作
public ActionResult Foo()
{
Response.StatusCode = 403;
Response.StatusDescription = "Some custom message";
return View(); // or Content(), Json(), etc
}
Run Code Online (Sandbox Code Playgroud)
如果你真的需要这个作为ActionResult,你可以自己创建.
例:
public class HttpStatusContentResult : ActionResult
{
private string _content;
private HttpStatusCode _statusCode;
private string _statusDescription;
public HttpStatusContentResult(string content,
HttpStatusCode statusCode = HttpStatusCode.OK,
string statusDescription = null)
{
_content = content;
_statusCode = statusCode;
_statusDescription = statusDescription;
}
public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response;
response.StatusCode = (int) _statusCode;
if (_statusDescription != null)
{
response.StatusDescription = _statusDescription;
}
if (_content != null)
{
context.HttpContext.Response.Write(_content);
}
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*rei 11
如果这不是太脏
Response.Clear();
Response.Write("Some specific string");
return new HttpStatusCodeResult(403, "another specific string");
Run Code Online (Sandbox Code Playgroud)