asp.net-mvc – 在ASP.NET MVC控制器结果中设置HTTP状态不呈现视图
发布时间:2020-05-23 22:23:48 所属栏目:asp.Net 来源:互联网
导读:我有一个自定义ActionResult用于返回某些HTTP错误,如NotFoundResult和ForbiddenResult,它们都派生自ViewResult. 如果在操作过程中没有在数据库中找到实体,我会将它们用于404的短路操作. 在这些结果对象中,我将HTTP状态设置为适当的数字.当我这样做时,这些View
|
我有一个自定义ActionResult用于返回某些HTTP错误,如NotFoundResult和ForbiddenResult,它们都派生自ViewResult. 如果在操作过程中没有在数据库中找到实体,我会将它们用于404的短路操作. 在这些结果对象中,我将HTTP状态设置为适当的数字.当我这样做时,这些ViewResults引用不会呈现的视图.我必须将状态保留为200 OK才能呈现我的视图. 如何在ASP.NET MVC 2.0中设置适当的状态并呈现视图? 解决方法
请允许我建议您替代错误处理: 首先创建一个错误控制器和相应的视图: public class ErrorController : Controller
{
public ActionResult General()
{
return View();
}
public ActionResult HttpError404()
{
return View();
}
public ActionResult HttpError500()
{
return View();
}
}
在Global.asax中定义Application_Error方法: protected void Application_Error(object sender,EventArgs e)
{
var exception = Server.GetLastError();
// TODO: Log the exception with your favorite logging framework
Response.Clear();
var httpException = exception as HttpException;
var routeData = new RouteData();
// Take the ErrorController
routeData.Values.Add("controller","error");
if (httpException == null)
{
// Use the General action for any unhandled error
routeData.Values.Add("action","general");
}
else
{
switch (httpException.GetHttpCode())
{
case 404:
routeData.Values.Add("action","httpError404");
break;
case 500:
routeData.Values.Add("action","httpError500");
break;
default:
routeData.Values.Add("action","general");
break;
}
}
// Add the exception to route data so that the error controller
// could use it with RouteData.Values["error"]
routeData.Values.Add("error",exception);
Server.ClearError();
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context),routeData));
}
最后抛出适当的例外: public class HomeController: Controller
{
public ActionResult Index(int id)
{
var model = _repository.GetModel(id);
if (model == null)
{
throw new HttpException(404,"Model not found with id = " + id);
}
return View(model);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – MVC – 重定向在构造函数内
- 我的ASP.Net代码可以从sendgrid得到确认邮件已发送吗?
- 我可以使用ASP.NET成员身份实体框架吗?
- asp.net-mvc – 如何改变jslint(VS 2010扩展)忽略文件?
- Phonegap上的ASP.NET窗体身份验证问题(Android)
- asp.net-mvc-3 – 重定向与RedirectToRouteResult不工作从其
- asp.net – HTML敏捷包删除break标签关闭
- asp.net-mvc – 在ASP.Net MVC视图中显示/隐藏链接
- asp.net-mvc-4 – 从beta版升级后的Autofac / MVC4 / WebAp
- asp.net-mvc – MVC4 Razor – @ Html.DisplayFor没有绑定到
推荐文章
站长推荐
热点阅读
