簡體   English   中英

ASP.NET發送異常消息

[英]ASP.NET send exception message

我正在開發Web應用程序,這是我處理異常的方法:

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    LogManager.GetCurrentClassLogger().Error(ex);
    Response.Clear();
    Server.ClearError();

    HttpException httpEx = ex as HttpException;

    if (httpEx == null)
        httpEx = new HttpException(400, ex.Message, ex);

    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "Error");
    routeData.Values.Add("action", "Handler");
    routeData.Values.Add("exception", httpEx);
    Response.TrySkipIisCustomErrors = true;
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
    var c = ControllerBuilder.Current.GetControllerFactory().CreateController(rc, "Error");
    c.Execute(rc);
}

發生異常時(例如: throw new ArgumentException("Generator with given Id does not exist."); ),用戶將收到錯誤視圖,其中包含有關所發生事件的詳細信息。

問題是,錯誤消息沒有以HttpResponseMessage的形式(作為ReasonPhrase或其他任何形式)發送給用戶。

private async void DeleteGenerator(Guid id)
{
    var response = await dataService.RemoveGenerator(id);
    if ((int)response.StatusCode >= 300)
        MessageBox.Show( /* Error message from response */ );  
}

在這里,我應該收到帶有"Generator with given [...]"框,但是我不知道如何實現這一點。 我試過這個 ,但“HttpError”缺失, 可是我真的不知道如何將其落實到我的代碼(如何被發送的Application_Error實際HttpResponseMessage)和這個 ,但再次我不知道應該如何改變。


編輯

這是我的常規錯誤處理程序控制器:

public ActionResult Handler(HttpException exception)
{
    Response.ContentType = "text/html";
    if (exception != null)
    {
        Response.StatusCode = exception.GetHttpCode();
        ViewBag.StatusString = (HttpStatusCode)exception.GetHttpCode();
        return View("Handler", exception);
    }
    return View("Internal");
}

而且我已經出於測試目的嘗試了此操作,但它也無法正常工作(客戶端收到帶有“ Bad Request”作為ReasonPhrase HttpResponseMessage

public HttpResponseMessage Handler(HttpException exception)
{
    Response.ContentType = "text/html";
    if (exception != null)
    {
        return new HttpResponseMessage
        {
            Content = new StringContent("[]", new UTF8Encoding(), "application/json"),
            StatusCode = HttpStatusCode.NotFound,
            ReasonPhrase = "TEST"
        };
    }
    return null;
}

所以在我的Controller ,負責顯示錯誤觀點(這是創建,並在觸發Application_Error方法),我已經添加了StatusDescription進入Response 這不是理想的方法,它會覆蓋實際的StatusCode字符串,但是可以工作。

public class ErrorController : Controller
{
    public ActionResult Handler(HttpException exception)
    {
        Response.ContentType = "text/html";
        if (exception != null)
        {
            Response.StatusCode = exception.GetHttpCode();
            Response.StatusDescription = exception.Message;
            ViewBag.StatusString = (HttpStatusCode)exception.GetHttpCode();

            return View("Handler", exception);
        }

        return View("Internal");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM