以文件名包括扩展名的服务堆栈路由为目标

本文关键字:堆栈 路由 目标 服务 文件名 包括 扩展名 | 更新日期: 2023-09-27 18:32:02

>我在将文件名(包括扩展名)传递给服务堆栈方法时遇到了问题。这是我想要实现的目标:

[Route("/files/{FileName}")]
public class GetFile : IReturn<Stream>
{ 
   public string FileName { get; set; }
}

作为文件名,我需要传递类似"SomeFile.extension"的东西。我试过了

[Route("/files/{FileName}.{Extension}")]
public class GetFile : IReturn<Stream>
{ 
   public string FileName { get; set; }
   public string Extension { get; set; }
}

也没有运气。作为我得到的回应

HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。

有谁知道如何在服务堆栈路由中允许文件扩展名?

提前谢谢你。

以文件名包括扩展名的服务堆栈路由为目标

实际上解决方案是添加处理程序

<httpHandlers>
  <add verb="*" path="*.*" type="App.Handlers.SomeHandler" />
</httpHandlers>

并在那里重写网址

string url = Request.RawUrl.Replace(".", "%2E");
context.RewritePath(url);

您可能会点击ServiceStack中的内容协商功能,这是一种使用.extension名指定格式的方法

https://github.com/ServiceStack/ServiceStack/wiki/Routing#content-negotiation

您可以通过设置禁用:

Config.AllowRouteContentTypeExtensions = false

如果这不起作用,您可以查看路由中的点问题