ASP.NET _ViewStart.cshtml - 获取请求

时间:2015-08-20 19:59:52

标签: c# razor asp.net-core

我有一个ASP.NET应用程序。我的应用程序有一个_ViewStart.cshtml文件。那个文件看起来像这样:

curl -XGET http://elastic-search-host:9200/my_index/_search?scroll=1m&search_type=scan&size=10 -d '
{
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}
'

执行此代码时,出现以下错误:

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

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

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

由于

2 个答案:

答案 0 :(得分:4)

要从_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());
});

答案 1 :(得分: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,但查看了框架的源代码。看起来Context上的RazorPage属性返回HttpContext。或者,您可以通过HttpContext访问ViewContext。见下文:

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

  var p = Context.Request.Query["parameter"];
  // or this...
  // var p = ViewContext.HttpContext.Request.Query["parameter"];
  ViewBag.QSParameter = p;
}