IIS 中的托管项目将项目名称附加到 URL 并中断我的路由
Hosting project in IIS appends project name to the URL and breaks my routing
我有一个 web api 2 项目,在我的代码中我自己做了一些路由工作。
我所有的动作都在一条路线上,所以点击 localhost/<anything>
将始终在一条路线上。
在那条路线中,我正在做一些自定义模式匹配。
如果用户转到 /Kittens/AdoptAKitten/12345
它将匹配我使用正则表达式的模板,定义为 /Kittens/AdoptAKitten/{something}
问题是当我在本地托管我的项目时,它以 localhost/KITTENCORP.ADOPTION/
结尾,这是我的项目名称。结果路由匹配不起作用。
我不确定如何考虑这个 'root' 地址。以前我只是查看 Uri
对象的域部分,但我需要将这部分包含在比较中以使其工作(或 disregard/remove 它)。
然而,此代码也将部署到某处的服务器,此时它可能托管在 adoptionservice.kittens.org
上,因此 adoptionservice.kittens.org/Kittens/AdoptAKitten/12345
将是 url。所以它必须考虑这两种情况。
有什么办法可以解决这个问题吗?
对于任何遇到这个问题并想知道同样事情的人,我用这段代码修复了它:
// 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);
}
我有一个 web api 2 项目,在我的代码中我自己做了一些路由工作。
我所有的动作都在一条路线上,所以点击 localhost/<anything>
将始终在一条路线上。
在那条路线中,我正在做一些自定义模式匹配。
如果用户转到 /Kittens/AdoptAKitten/12345
它将匹配我使用正则表达式的模板,定义为 /Kittens/AdoptAKitten/{something}
问题是当我在本地托管我的项目时,它以 localhost/KITTENCORP.ADOPTION/
结尾,这是我的项目名称。结果路由匹配不起作用。
我不确定如何考虑这个 'root' 地址。以前我只是查看 Uri
对象的域部分,但我需要将这部分包含在比较中以使其工作(或 disregard/remove 它)。
然而,此代码也将部署到某处的服务器,此时它可能托管在 adoptionservice.kittens.org
上,因此 adoptionservice.kittens.org/Kittens/AdoptAKitten/12345
将是 url。所以它必须考虑这两种情况。
有什么办法可以解决这个问题吗?
对于任何遇到这个问题并想知道同样事情的人,我用这段代码修复了它:
// 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);
}