【问题标题】:Implementing Message Handlers in MVC 6在 MVC 6 中实现消息处理程序
【发布时间】:2015-06-25 21:29:12
【问题描述】:

我有当前的 API (web api 2) 项目,该项目有许多正在使用的消息处理程序,一些为每个请求运行(检查以确保请求是 https 并且请求来自授权客户端),还有一些是在特定路由上运行(检查是否存在安全令牌)。

现在我的问题是如何在 MVC 6 中复制此功能,我目前的理解是它应该通过使用中间件来完成,但我没有找到允许我检查传入请求的标头的示例并且它们是否应该返回适​​当的 http 响应代码。

【问题讨论】:

    标签: middleware asp.net-core-mvc message-handlers


    【解决方案1】:

    中间件绝对是解决您要解决的问题的正确选择。我在这里写了一个关于使用/编写中间件的不错的解释:ASP.NET MVC 6 handling errors based on HTTP status code

    为了具体回答如何检查标题,这里有一个例子:

    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Use(async (context, next) =>
            {
                if (!string.Equals(context.Request.Headers["myheader"], "somevalue", StringComparison.Ordinal))
                {
                    context.Response.StatusCode = 400;
                    await context.Response.WriteAsync("Invalid headers");
                }
                else
                {
                    await next();
                }
            });
        }
    }
    

    【讨论】:

    • 在写入响应流后尝试修改状态码或标头可能会在 WebListener 等流式主机上崩溃。您应该在调用Write/WriteAsync 之前设置状态。您还可以选择缓冲并将响应流替换为 MemoryStream,您将在中间件末尾刷新到真实流。
    • 有没有办法指定状态消息和代码?你也知道我会如何重定向到不同的路线吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多