使用包含扩展名的文件名定位服务堆栈路由

时间:2014-11-26 18:26:20

标签: c# servicestack

我遇到了传递文件名的问题,包括扩展到Service Stack方法。这就是我想要实现的目标:

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

作为FileName,我需要传递类似“SomeFile.extension”的内容。 我试过了

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

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

  

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

并在那里重写网址

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

答案 1 :(得分:1)

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

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

您可以通过设置:

来禁用
Config.AllowRouteContentTypeExtensions = false

如果这不起作用,您可以review issues with dots in routing