我有一条路线:
[Route("/usergroup/{User}/{Group}", "GET")]
Run Code Online (Sandbox Code Playgroud)
问题是当{User}中存在特殊字符(例如句点)时,路径未正确评估.如果我手动测试请求,应如何编码?
/usergroup/joe.smith/group1 of course doesn't work
/usergroup/joe%2Esmith/group1 doesn't work either
Run Code Online (Sandbox Code Playgroud)
这里的诀窍是什么?
(更新)这似乎只发生在某些特殊字符上.我可以使用%2D( - )但我不能使用%2E(.).
(更新2)这似乎比那更险恶.这似乎只发生在Visual Studio启动的ASP.Net Development服务器上.
(更新3)这使调试很痛苦.基本上,路径路径不能包含句点,或者我得到"Handler for Request not found"404.
实际上,ServiceStackHttpHandlerFactory(3.9.59)似乎抛出了未找到的错误.
我很确定这是一个Visual Studio开发服务器不像"真正的"IIS那样的情况.我自己测试了一下:
如果编辑项目Web属性并选中"使用IIS Express"而不是"Visual Studio Development Server",则问题将消失.
这里解释了使用IIS Express的情况
我还找到了另一个SO答案,这是一个类似的案例. 幸运的是,那里的答案包含一个错误的链接引用,但引用了实际的文本.
这是我使用的代码:
public class UserGroupService : Service
{
public object Any(UserGroupRequest request)
{
return new UserGroup { User = "Got: " + request.User, Group = "Got: " + request.Group, };
}
}
[Route("/usergroup/{User}/{Group}", "GET")]
public class UserGroupRequest
{
public string User { get; set; }
public string Group { get; set; }
}
public class UserGroup
{
public string User { get; set; }
public string Group { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
更新:我找到了参考ee941656的良好链接
如果在Visual Studio 2010中创建文件系统网站,并且该网站位于文件夹名称中包含点(.)的文件夹中,则URL路由将无法可靠地运行.从某些虚拟路径返回HTTP 404错误.发生这种情况是因为Visual Studio 2010使用根虚拟目录的错误路径启动Visual Studio开发服务器(Cassini).
有3个解决方法,只有"使用IIS而不是Cassini"解决方法似乎有效.
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |