Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >消息未按预期工作的UseStatusCodePagesWithReExecute的用法

消息未按预期工作的UseStatusCodePagesWithReExecute的用法
EN

Stack Overflow用户
提问于 2019-01-10 09:13:24
回答 1查看 1.4K关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.UseStatusCodePagesWithReExecute("/Error/{0}");

在我的控制器中,我指向两个视图中的一个,一个404.cshtml视图和一个通用error.cshtml视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ErrorController : Controller
{
    [HttpGet("[controller]/{statusCode:int}")]
    public IActionResult Error(int? statusCode = null)
    {
        if (statusCode.HasValue)
        {
            if (statusCode == (int)HttpStatusCode.NotFound)
            {
                return View(statusCode.ToString());
            }
        }

        return View();
    }
}

现在,在我的页面控制器中,我可以执行以下操作,它可以按预期工作。它将显示error.cshtml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public IActionResult SomePage()
{
    return BadRequest();
}

现在,如果我将上面的代码更改为下面的代码,我的ErrorController确实会命中,但当它命中时,浏览器中已经加载了一个空白视图,其中只显示了“一些详细信息”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public IActionResult SomePage()
{
    return BadRequest("Some details");
}

你知道为什么吗?我想让它加载error.cshtml

EN

回答 1

Stack Overflow用户

发布于 2019-01-11 08:24:28

正如@Kirk Larkin所说,UseStatusCodePagesWithReExecute中间件不会工作,它只会处理状态代码。

您可以使用结果筛选器编写自定义逻辑来对其进行筛选并返回一个ViewResult:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class StatusCodeResultFilter : IAsyncResultFilter
{
    public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        // retrieve a typed controller, so we can reuse its data
        if (context.Controller is Controller controller)
        {
            // intercept the NotFoundObjectResult
            if (context.Result is BadRequestObjectResult badRequestObject)
            {
                // set the model, or other view data
                controller.ViewData.Model = badRequestObject.Value;

                // replace the result by a view result
                context.Result = new ViewResult()
                {
                    StatusCode = 400,
                    ViewName = "Views/Error/status400.cshtml",
                    ViewData = controller.ViewData,
                    TempData = controller.TempData,

                };
            }

        }

        await next();
    }
}

注册过滤器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 services.AddMvc(config =>
        {
            config.Filters.Add(new StatusCodeResultFilter());

        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

在您的视图中,您可以通过以下方式直接获取详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Model

参考:https://stackoverflow.com/a/51800917/5751404

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54125264

复制
相关文章

相似问题

System.UnauthorizedAccessException:拒绝对路径的访问

13

System.UnauthorizedAccessException:拒绝对路径的访问

25

DotNetZip System.UnauthorizedAccessException:拒绝对路径的访问

16

MAUI :System.UnauthorizedAccessException:拒绝对路径的访问

26

System.UnauthorizedAccessException:拒绝对路径的访问,VS2013

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文