首页 > 解决方案 > 升级到 inProcess 后,我在双斜杠上得到 404

问题描述

我有.net core 2.2 web api,我将其升级为“inProcess”,使用双前向 slah 调用此服务的客户得到 404,当将其配置为“OutOfProcess”时,它工作得很好。有问题的调用示例:

https://mMYapiAddress.co/api/GetSomeData//3

当将其配置为“OutOfProcess”时,它工作得很好。

我希望我的 web api 能够工作“inProcess”配置,并且能够像以前一样使用双斜杠进行调用。

标签: c#.net-coregetquery-stringasp.net-core-webapi

解决方案


配置 "OutOfProcess" 时,Kestrel Web 服务器用于处理您的请求。在 Kestrel Web 服务器中,请求路径中的空格或额外字符串会被自动识别,并将路径修改为正确的格式。

配置“InProcess”时,使用 IIS HTTP 服务器(IISHttpServer)代替 Kestrel 服务器。请求由应用程序直接处理。所以你得到了 404 响应。

您可以自定义一个中间件来重写 url,如下所示:

public class RewriteRouteRule
{

    public static void ReWriteRequests(RewriteContext context)
    {
        var request = context.HttpContext.Request;
        if (request.Path.Value.Contains("values"))
        {
            string[] splitlist = request.Path.Value.Split("/");
            var newarray = splitlist.Where(s => !string.IsNullOrEmpty(s)).ToArray();
            var newpath = "";

            foreach (var item in newarray)
            {
                newpath += "/" + item;
            }
            request.Path = newpath;
        }
    }
}

在 Startup.cs 的 Configure 方法中使用中间件

app.UseRewriter(new RewriteOptions()
                      .Add(RewriteRouteRule.ReWriteRequests)
                      );

推荐阅读