【问题标题】:I got a 404 on a double slash after upgrading to inProcess升级到 inProcess 后,我在双斜杠上得到 404
【发布时间】:2019-10-03 07:40:26
【问题描述】:

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

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

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

我希望我的 web api 能够使用“inProcess”配置,并且能够像以前一样使用双斜杠接听电话。

【问题讨论】:

    标签: c# .net-core get query-string asp.net-core-webapi


    【解决方案1】:

    配置“OutOfProcess”时,Kestrel web server 用于处理您的请求。 在 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)
                          );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2018-03-18
      相关资源
      最近更新 更多