我有一些模型,我想像这样在 RazorView 中呈现 html 标记:

<a href="@Model.Website">@Model.Title</a>

用户可以在 Website 属性( google.comwww.google.comhttp://www.google.com 等)中写入任何 url。

问题是如果用户不写协议(protocol)前缀,比如 http ,那么结果 HTML 会被浏览器视为站点相对 URL:
<a href="http://localhost:xxxx/google.com">Google</a>

是否有任何简单的解决方案,或者我是否必须在呈现 html 之前准备网站字符串(添加“http”前缀)?

最佳答案

这不是真正的 MVC 特定,但您可以使用 UriBuilder 类:

string uri = "http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx";
var uriBuilder = new UriBuilder(uri);
uriBuilder.Scheme = "http";
Console.WriteLine(uriBuilder.Uri);

打印 http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx
string uri = "google.com";
var uriBuilder = new UriBuilder(uri);
uriBuilder.Scheme = "http";
Console.WriteLine(uriBuilder.Uri);

打印 http://google.com/

10-07 12:04