我有一个类似下面这样的控制器操作:
public ActionResult Index(string url)
{
var pageTitle = url.Split('/')[0];
var page = Services.PageService.GetPage(pageTitle);
if (page == null)
{
throw new HttpException((Int32) HttpStatusCode.NotFound, "NotFound");
}
return View(page);
}每次我调试我的站点时,当HttpException被抛出时,我从Visual Studio得到一个提示,通知我用户代码未处理该异常。
我想我只是想要有人澄清我正在做的事情是正确的,并且这份通知可以不用担心地被驳回。在我实际处理HttpException的Global.asax文件中,事件仍然会冒泡到Application_Error方法,所以据我所知,唯一的问题是VS在每次抛出这个异常时都会告诉我,这很不方便。
发布于 2012-02-13 17:36:35
我想我只是想要有人澄清我所做的事情是正确的,并且这份通知可以不用担心地被驳回。
是的,您看到的就是所谓的first chance exception。VS调试器会通知您代码中发生的所有异常。如果你有一个适当的处理程序来处理这个异常,你应该就没问题了。
发布于 2012-02-13 17:37:51
我假设您希望将http代码(在本例中为404 )返回给页面的用户/消费者。所以你应该这样做:
public ActionResult Index(string url)
{
var pageTitle = url.Split('/')[0];
var page = Services.PageService.GetPage(pageTitle);
if (page == null)
{
return new HttpNotFoundResult();
}
return View(page);
}HttpNotFoundResult是asp.net-mvc3中的一个新的ActionResult,还有一个受保护的方法HttpNotFound(),它是控制器类的一部分,做同样的事情。在这两种情况下,您还可以提供消息字符串。
我认为从unit-testing的角度来看,返回一个ActionResult也更优雅。
https://stackoverflow.com/questions/9258234
复制相似问题