2016-11-15 307 views
0

我对ASP.NET MVC 4中的HttpException异常类有点困惑。我知道它可以让你抛出自定义的错误代码,但也有另一个构造函数可以接受消息:在ASP.NET MVC中的HttpException有什么意义

HttpException Constructor

据我了解,只允许HTTP发送回状态码和相关的如“内部服务器错误”状态码一个小消息。如果是这样的话,在ASP.NET MVC应用程序的上下文中使用这个类甚至是什么?现在我有控制器抛出HttpExceptions与特定的状态代码告诉客户发生了什么。这是正确的方法吗?例如:

/// <summary> 
    /// GET: Returns the data required for the modal to edit the environments. 
    /// </summary> 
    /// <returns></returns> 
    [HttpGet] 
    public ActionResult EditEnvironments() 
    { 
     try 
     { 
      List<Setting> settings = _service.GetAllSettings().ToList(); 
      return PartialView("_EditEnvironments", settings); 
     } 
     catch (Exception ex) 
     { 
      Log.Error(ex.Message, ex); 
      throw new HttpException(500, "Something bad happened.", ex); 
     } 
    } 

这里的消息 “坏事发生了。”永远不会显示给客户。感谢您的澄清!

+2

Erm,你从哪里得到的想法HTTP只发回状态码?那么如何陈述“确定”然后工作? – walther

+0

这样做没有意义,MVC应用程序处理HTTP状态代码。当你进行Web服务调用或者使用'HttpWebRequest'或'HttpWebResponse'出于任何原因时,通常使用'HttpException' – Fourat

+0

我知道有一个状态码和一个像'OK'这样的小消息,就像我在第二段中写的那样。和福拉 - 谢谢。 – coolboyjules

回答

0

好的基于评论,事实证明,它是没有意义的ASP.NET MVC应用程序只有一个客户端和服务器。这对两个Web API可以相互交流很有用。但是,如果有人有兴趣要“通行证”的消息给客户端在ASP.NET MVC的背景下,你可以使用HttpStatusCodeResult这样的:

return new HttpStatusCodeResult(500,"Something bad happened") 

,您可以访问“一些糟糕的事情发生”使用,也就是说,jQuery的$。阿贾克斯()是这样的:

    $.ajax: { 
         url: "@Url.Action("RequestsAdminAjax", "Admin")", 
         type: "POST", 
         data: function(data) { return JSON.stringify(data); }, 
         contentType: "application/json; charset=utf-8", 
         error: function (xhr, textStatus,errorThrown) { 
          debugger; 
          toggleAlert('<strong>Error: </strong>Unable to load data.', 'alert alert-danger'); 
         } 
        }, 

errorThrown将包含 “一些糟糕的事情发生”。

希望这可以帮助别人。