我已经接管了一个项目,它有很多代码连接字符串以组合网址。我一直在努力记住,如果每个API都返回基本Url末尾的“/”(“http://www.mysite.com”或“http://www.mysite.com/”)< / p>
例如:
var baseUrl = "http://www.mySite.com/";
var controllerAndAction = "/Mycontroller/MyAction";
var fullUrl = baseUrl + controllerAndAction;
或
var baseUrl = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
var controllerAndAction = "Mycontroller/MyAction";
var fullUrl = baseUrl + controllerAndAction;
或
var baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
var controllerAndAction = "Mycontroller/MyAction";
var fullUrl = baseUrl + controllerAndAction;
或
var baseUrl = "http://www.mySite.com";
var controllerAndAction = "/Mycontroller/MyAction";
var fullUrl = baseUrl + controllerAndAction;
(注意baseUrl末尾的“/”和controllerAndAction的开头)
我正在尝试找出最简洁的方法来确保这些创建包含单个“/”(不是2或0)的正确网址
我能做些什么来帮助确认这一点(除了手动测试每一个......)?
我需要这个代码在asp.net-mvc和winforms项目中工作,所以我试图避免与任何一个耦合的代码(以避免引用不必要的库)
答案 0 :(得分:2)
这不好玩。查看Path.Combine for Urls。此方法应该允许您组合基本URL,路径和查询字符串。
注意:链接建议使用URI
这是一个基本系统类,可用于任何类型的C#/ VB项目。
答案 1 :(得分:0)
我使用Path.Combine
。并非100%确定它会处理丢失的'/'情况,您需要尝试一次。
答案 2 :(得分:0)
假设所有输入都正确(所有输入都只有0或1 /
)。我认为你需要2 if / else来确保:
baseURL
的结尾有/
controllerAndAction
的开头没有/
答案 3 :(得分:0)
以上都不是。为什么在框架已经为您提供执行此工作的method时连接字符串?您甚至用string-concatenation
标记了您的问题,但这对您要做的事情来说是错误的。
要在ASP.NET MVC应用程序中生成绝对URL,该应用程序会考虑您的路由,它就像以下一样简单:
public ActionResult Foo()
{
var fullUrl = Url.Action("MyAction", "MyController", null, Request.Url.Scheme);
...
}
在处理网址时,绝不应使用字符串连接和硬编码。在ASP.NET MVC应用程序中使用URL时,始终使用URL帮助程序。