2016-11-29 94 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)