2016-11-29 95 views
0

我想從Asp.Net核心中的View Component返回一個HTTP 500或BadRequest()結果,但是這種返回類型似乎不可用查看組件。如果狀態代碼返回類型可用於View組件,或者讓我的設計出錯?如何從Asp.Net核心查看組件返回錯誤的HTTP狀態代碼

我打電話通過ajax我控制器操作按如下......

<a asp-controller="Client" asp-action="LoadVisit" asp-route-id="@item.VisitID" data-ajax="true" data-ajax-method="GET" data-ajax-update="#ClientVisit" data-ajax-mode="replace" data-ajax-failure="AjaxOnFailure(xhr, status, error)" role="button"><i class="fa fa-folder-open-o"></i></a> 

我的控制器動作調用/返回我的View組件按下面...

public IActionResult LoadVisit(int? id) 
{ 

    if (id == null || id == 0) 
    { 
     return NotFound(); 
    } 

    return ViewComponent("ClientVisit", new { visitID = id.GetValueOrDefault() }); 

} 

我ClientVisit查看組件具有以下...

public async Task<IViewComponentResult> InvokeAsync(int? clientID, int? visitID) 
{ 

    try 
    { 
     var model = new VisitViewModel(); 
     model = await visitAPI.GetVisit(clientID, visitID); 
     return View(model); 
    } 
    catch (Exception ex) 
    { 
     return Content(ex.Message); 
    } 

} 

當我的數據庫調用model = await visitAPI.GetVisit(clientID, visitID)失敗我想返回return StatusCode(500, ex.ToString()),但它不可用,所以我的ajax調用認爲我的請求是成功的,這是錯誤的。

回答

1

只要你有HttpResponse的訪問它應該工作。或者,由於ViewComponent先決條件檢查的返回,然後設置狀態。

try 
{ 
    var model = new VisitViewModel(); 
    model = await visitAPI.GetVisit(clientID, visitID); 
    return View(model); 
} 
catch (Exception ex) 
{ 
    Response.StatusCode = (int)HttpStatusCode.BadRequest; 
    return null; 
} 
+0

不幸的是HttpResponse在View Component中不可用。編譯錯誤_名稱'Response'在當前上下文中不存在_ – OjM

+0

它是如何檢查來自'ViewComponent(「ClientVisit」,new {visitID = id.GetValueOrDefault()});'的結果'如: var view = ViewComponent(「ClientVisit」,new {visitID = id.GetValueOrDefault()}); if(view == null) Response.StatusCode =(int)HttpStatusCode。錯誤的請求; 返回null; } return view;' –

+0

您可以在'HttpContext'中找到'Response'例如:'HttpContext.Response.StatusCode = ???;',但它仍然不起作用,因爲「視圖組件從不直接處理一個要求」。 –

1

View Components文檔:

甲視圖分量從未處理的請求時,

視圖分量方法上的簽名,而不是從當前的HTTP請求的任何細節超載,

所以據我瞭解,你將無法創建HTTP響應(如StatusCode()BasRequest())。


此外,您可以訪問HttpContext.Response.StatusCode,但這也不會如你所願。


此外,您無法從視圖組件返回null - 你將看到異常:

InvalidOperationException: A view component must return a non-null value. 


由於上面,我不知道如何從View組件返回狀態代碼。也許,你可以將View Component轉換成簡單的'helper'方法,這樣你就可以在動作中捕捉異常,然後按照你的意願返回StatusCode(500)