首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net核心路由URLEncoded URL不工作

.Net核心路由URLEncoded URL不工作
EN

Stack Overflow用户
提问于 2019-08-05 16:13:43
回答 1查看 1.6K关注 0票数 3

我有一个.Net核心2.2 WebAPI,它与“普通”风格的URL (例如/ API /控制器/action/param等)非常好地工作。我有一个第三方服务,它使用一个URL编码路径向这个API发送一个帖子,而Asp.Net路由无法正确地路由这个请求。

控制器位于:./api/file/uploadFile/{filename}

来自第三方的帖子是:".../api%2Ffile%2FuploadFile%2FMaintenanceReport_2019_08_05_17_11_10.html.gz".

替换路径中的%2F似乎像预期的那样工作:".../api/file/uploadFile/MaintenanceReport_2019_08_05_17_11_10.html.gz“

文件名是:"MaintenanceReport_2019_08_05_17_11_10.html.gz“

使用%2F而不是"/“类型的工作来放置一个路由属性,但是看起来非常混乱。

传入路径的文件名也不能正确解析为参数。我怀疑这是由于文件扩展名被包括在内。

我搜过网,没有发现任何与我有关的东西。有什么建议/想法吗?

代码语言:javascript
复制
[Route("api/[controller]/[action]")]
[Route("api%2F[controller]%2F[action]")]
public class FileController : Controller
{
  ...
}

我认为.Net核心路由引擎会检测到路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-06 06:39:57

路由生成的url中的默认路径分隔符是/ .The问题,该问题似乎没有识别或丢失作为路径值一部分的参数之前的分隔符。

如果您请求url类似于.../api%2Ffile%2FuploadFile%2FMaintenanceReport_2019_08_05_17_11_10.html.gz,您可以尝试使用URL重写中间件,如下所示:

  1. 在配置中 app.UseRewriter(new RewriteOptions() .Add(RewriteRouteRules.ReWriteRequests) );

2.自定义包含ReWriteRequests的类

代码语言:javascript
复制
public class RewriteRouteRules
{
    public static void ReWriteRequests(RewriteContext context)
    {
        var request = context.HttpContext.Request;

        if (request.Path.Value.Contains("%2F", StringComparison.OrdinalIgnoreCase))
        {
            context.HttpContext.Request.Path = context.HttpContext.Request.Path.Value.Replace("%2F", "/");
        }

    }
}

参考资料:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-2.1&tabs=aspnetcore2x

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

https://stackoverflow.com/questions/57362405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档