升级到inProcess后,我在双斜杠上看到404

时间:2019-10-03 07:40:26

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

我有.net core 2.2 Web API 我将其升级为“ inProcess”,使用双前向slah调用此服务的客户端得到了404,将其配置为“ OutOfProcess”时,它就可以正常工作。 有问题的通话示例:

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

将其配置为“ OutOfProcess”时,就可以正常工作。

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

1 个答案:

答案 0 :(得分:0)

配置“ OutOfProcess”时,Kestrel web server用于处理您的请求。 在Kestrel Web服务器中,将自动识别请求路径中的空格或多余的字符串,并将路径修改为正确的格式。

配置“ InProcess”时,将使用IIS HTTP服务器(IISHttpServer)代替Kestrel服务器。请求直接由应用程序处理。这样您就收到了404响应。

您可以自定义中间件来重写网址,如下所示:

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