【问题标题】:ASP.NET _ViewStart.cshtml - Getting the RequestASP.NET _ViewStart.cshtml - 获取请求
【发布时间】:2015-11-14 15:03:59
【问题描述】:

我有一个 ASP.NET 应用程序。我的应用程序有一个 _ViewStart.cshtml 文件。该文件如下所示:

@using MyCompany.MyApp;
@{
  Layout = "/Views/Shared/_Layout.cshtml";

  var p = HttpContext.Current.Request.QueryString["parameter"];
  ViewBag.QSParameter = p;
}

当我执行此代码时,我收到以下错误:

The name 'HttpContext' does not exist in the current context

我不明白。 _ViewStart.cshtml 不是视图的“外壳”吗?我试图弄清楚如何全局读取查询字符串参数并为每个请求在 ViewBag 上设置一个值。我认为这就是这样做的方法。

谢谢

【问题讨论】:

    标签: c# razor asp.net-core


    【解决方案1】:

    要从_ViewStart.cshtml 检索它,您可以使用:

    ViewBag.QSParameter = Context.Request.Query["parameter"];
    

    注意:现在在 ASP.NET 5 中使用 Query(超过 QueryString

    不过,我可能会选择另辟蹊径,利用IResultFilter

    public class QSParameterFilter : IResultFilter
    {
      public void OnResultExecuting(ResultExecutingContext context)
      {
        var QSParameter = context.HttpContext.Request.Query["parameter"];
        ((Controller)context.Controller).ViewBag.QSParameter = QSParameter;
      }
      public void OnResultExecuted(ResultExecutedContext context) { }
    }
    

    然后,在您的 Startup.cs 中注册它:

    services.AddMvc();
    services.Configure<MvcOptions>(options => {
      options.Filters.Add(new QSParameterFilter());
    });
    

    【讨论】:

      【解决方案2】:

      您应该可以访问 _ViewStart 文件中的Request

      试试这个:

      @using MyCompany.MyApp;
      @{
        Layout = "/Views/Shared/_Layout.cshtml";
      
        var p = Request.QueryString["parameter"];
        ViewBag.QSParameter = p;
      }
      

      编辑:对于 ASP.NET 5

      我的机器上没有 ASP.NET 5,但查看了框架的源代码。看起来RazorPage 上有一个Context 属性,它返回一个HttpContext。或者,您可以通过ViewContext 访问HttpContext。见下文:

      @{
        Layout = "/Views/Shared/_Layout.cshtml";
      
        var p = Context.Request.Query["parameter"];
        // or this...
        // var p = ViewContext.HttpContext.Request.Query["parameter"];
        ViewBag.QSParameter = p;
      }
      

      【讨论】:

      • 我做到了。没有运气。我应该提到我正在使用 ASP.NET 5。我不确定这是否会有所不同。
      • 哦,有趣。我假设 MVC 3-5 ...让我再挖掘一些。
      【解决方案3】:

      在文件属性中设置“Build Action = Content”。这将解决问题。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2018-03-28
      • 2017-07-09
      • 1970-01-01
      相关资源
      最近更新 更多