在MVC中生成Absolute Url时遇到问题

时间:2015-04-19 16:12:59

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

您好我已经创建了一个mvc网站,如果我正在编写类似这样的代码,它可以正常使用localhost:

    <base href="http://localhost:5400/" />
    <li><a class="home" href="/Home/Index/">Home</a></li>
    <li class="wish"><a class="wishlist" href="/Products/Index/" id="wishlist-total">Products</a></li>
     <li><a class="account" href="/Home/Contact/">Contact Us</a></li>

但是如果我想改变它,现在要在现场运行它:

  <base href="http://localhost:5400/" />   

用这个:

 <base href="HttpContext.Current.Request.Url" />

然后它实际上每次都获取完整的根URL。所以每当我点击任何菜单并移动到下一个菜单时它也会重新获得上一个菜单路径。

对于这个问题,我尝试下面的代码也没有用。

<li><a href="@Url.Action("Index", "Home", null, Request.Url.Scheme)">Home</a></li>
<li><a href="@Url.Action("Index","Products",null,Request.Url.Scheme)">Products</a></li>
<li>  <a href="@Url.Action("Contact","Home",null,Request.Url.Scheme)">Contact</a></li>

根据我这段代码可行,但如果我试图将“null”作为第三个参数传递,那么我会给出错误:

错误:未声明'null'。不再支持'Null'常量;改为使用'System.DBNull'。

有人可以建议我需要改变什么吗?

由于

1 个答案:

答案 0 :(得分:0)

快速修复...

@Url.Action("Index", "Home")

没有必要输入null作为参数...如果你想表明一个参数可以为null,那么你需要在路由中定义它自己,如果参数丢失,然后它将隐含地知道该值为空...

// http://yoursite/Example/{id}
[Route("~/Example/{id}"] // Can't be null
public ActionResult Example(string id){ return View(); }

// http://yoursite/ExampleTwo/
[Route("~/ExampleTwo/{id?} // Can be null
public ActionResult ExampleTwo(string id) { return View(); }

TLDR如果您想要更多错误......

  1. 您的问题实际上表明了一个更大的问题......看起来您似乎正在接受来自URI的查询直接进入SQL查询......如果您这样做,那么您就是&#39重新打开你自己的注射攻击,而且我的一部分感觉任何那些做到这一点的人都会让它来到他们身边......我不能袖手旁观,什么都不说......消毒您从用户收到的任何数据,无论它来自何处,example

  2. 删除所有这些魔法字符串......你不应该有任何字符串,例如你刚才显示的字符串......

    // Bad...
    <a class="home" href="/Home/Index/">  
    
    // Better...
    <a class="home" href="@Url.Action("Index", "Home")">Home</a>
    
    // Good
    @Html.ActionLink("Home", "Index", "Home")