c# - 如何从 Asp.Net Core View 组件返回错误的 HTTP 状态代码

标签 c# asp.net-core asp.net-core-viewcomponent

我正在尝试从 Asp.Net Core 中的 View 组件返回 HTTP 500 或 BadRequest() 结果,但是此返回类型似乎不适用于 View 组件。状态代码返回类型应该可用于 View 组件还是我的设计有误?

我按照下面的方式通过 ajax 调用我的 Controller 操作...

<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>

我的 Controller 操作正在调用/返回我的 View 组件,如下所示...

public IActionResult LoadVisit(int? id)
{

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

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

}

我的 ClientVisit View 组件具有以下...

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 调用认为我的请求成功,这是错误的。

最佳答案

只要您在访问中有 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;
}

关于c# - 如何从 Asp.Net Core View 组件返回错误的 HTTP 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40858676/

相关文章:

c# - 获取最后调用的方法的名称

c# - 同一解决方案中两个 ASP.NET Core 项目之间的通信

c# - 如何在 ASP.NET Core 的 razor View 中渲染之前检查 View 组件是否存在

c# - Damage over time effect 正在破坏我的帧率,unity c#

c# - 如何使用 C# MVC4 将 SQL Server 数据列表转换为结构化的 JSON 对象

Azure 中的 ASP.NET Core 2.0 URL 重写

c# - 为什么在使用SingleAsync时发生此错误?

ajax - 我可以通过 ajax 重新加载 asp 5/MVC 6 View 组件吗?

ajax - Ajax 刷新的 ViewComponent 替代方案

c# - 如何处理 .Net 中的模糊日期