Request.Url.PathAndQuery无法编译

时间:2015-11-25 04:35:01

标签: c# asp.net-mvc-5

我只是关注一本ASP.NET MVC 5书,并在他的代码示例中将其添加到视图中:

@model SportsStore.Domain.Entities.Product

<div class="well">
    <h3>
        <strong>@Model.Name</strong>
        <span class="pull-right label label-primary">@Model.Price.ToString("c")</span>
    </h3>

    @using (Html.BeginForm("AddToCart", "Cart")) {
        <div class="pull-right">
            @Html.HiddenFor(x => x.ProductID)
            @Html.Hidden("returnUrl", **Request.Url.PathAndQuery**)
            <input type="submit" class="btn btn-success" value="Add to cart" />
        </div>
    }

    <span class="lead"> @Model.Description</span>
</div>

问题出在我的Visual Studio Ultimate 2013中,关键字Request被标记为红色并且没有编译。我也安装了Resharper,并认为我需要Ninject.Activation ..这个项目确实使用Ninject而不是这个

1 个答案:

答案 0 :(得分:0)

使用HttpContext.Current.Request.Url.PathAndQuery时,引用System.Web程序集第4版,它与ASP.NET平台有关,而不是ASP.NET MVC框架。

public HttpRequest Request { get; }

正如我所说,这是来自ASP.NET平台的代码,而不是来自MVC框架的代码,详见Adam Freeman书的下一篇引文。

  

MVC框架依赖于ASP.NET平台来处理请求,这很有意义,因为它已得到证实,   功能丰富,可以很好地集成到IIS应用程序服务器中。一   问题是ASP.NET平台用来提供的类   关于请求的信息不太适合单元测试,这是一个关键   使用MVC框架的好处。 Microsoft需要引入可测试性,同时保持与现有ASP.NET Web窗体应用程序的兼容性,因此引入了所谓的基类,因为它们与核心ASP.NET平台类的名称相同,后跟单词Base。

如果我从他的书中也没有弄错你的例子。

Request.Url.PathAndQuery引用System.Web.Webpages版本3程序集,它是ASP.NET MVC框架程序集,您可以从this link通过NuGet下载。

它使用此代码:

 public virtual HttpRequestBase Request { get; }

核心区别是你可以单元测试HttpRequestBase并且不能HttpRequest。因此,对于ASP.NET MVC,建议使用System.Web.Webpages程序集和Request.Url.PathAndQuery

<强>更新 要使用System.Web.Webpages程序集,您应下载System.Web.Webpages第3版程序集from nuget page。安装它的最简单方法是将Install-Package Microsoft.AspNet.WebPages粘贴到Visual Studio中的程序包管理器控制台中。