我有一个web api 2项目,在我的代码中我自己做了一些路由。
我将所有操作都转到单一路线,因此点击localhost/<anything>
将始终转到一条路线。
在那条路线中,我正在做一些自定义模式匹配。
如果用户转到/Kittens/AdoptAKitten/12345
它将匹配我使用正则表达式的模板,定义为/Kittens/AdoptAKitten/{something}
问题是当我在本地托管我的项目时,它最终以localhost/KITTENCORP.ADOPTION/
结束,这是我项目的名称。因此,路线匹配不起作用。
我不确定如何考虑这个“根”地址。以前我只是查看Uri
对象的域部分,但我需要在比较中包含此部分以使其工作(或忽略/删除它)。
然而,此代码也会部署到服务器某处,此时它可能会托管在adoptionservice.kittens.org
上,因此adoptionservice.kittens.org/Kittens/AdoptAKitten/12345
将成为网址。所以它必须考虑到这两种情况。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
对于任何绊倒这个并且想知道同样事情的人,我用这段代码修复了它:
// When hosted in IIS it may get a virtual path such as localhost/KittenLibrary that needs including in comparisons
if (!string.IsNullOrEmpty(HttpRuntime.AppDomainAppVirtualPath))
{
urlStart = UrlCombine(urlStart, HttpRuntime.AppDomainAppVirtualPath);
}
UrlCombine是我从另一个SO问题中捏的一个函数:
private static string UrlCombine(string url1, string url2)
{
if (url1.Length == 0)
{
return url2;
}
if (url2.Length == 0)
{
return url1;
}
url1 = url1.TrimEnd('/', '\\');
url2 = url2.TrimStart('/', '\\');
return string.Format("{0}/{1}", url1, url2);
}