我有一个.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而不是"/“类型的工作来放置一个路由属性,但是看起来非常混乱。
传入路径的文件名也不能正确解析为参数。我怀疑这是由于文件扩展名被包括在内。
我搜过网,没有发现任何与我有关的东西。有什么建议/想法吗?
[Route("api/[controller]/[action]")]
[Route("api%2F[controller]%2F[action]")]
public class FileController : Controller
{
...
}我认为.Net核心路由引擎会检测到路径。
发布于 2019-08-06 06:39:57
路由生成的url中的默认路径分隔符是/ .The问题,该问题似乎没有识别或丢失作为路径值一部分的参数之前的分隔符。
如果您请求url类似于.../api%2Ffile%2FuploadFile%2FMaintenanceReport_2019_08_05_17_11_10.html.gz,您可以尝试使用URL重写中间件,如下所示:
2.自定义包含ReWriteRequests的类
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://stackoverflow.com/questions/57362405
复制相似问题