我有一个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上为每个请求设置一个值。我认为这是做到这一点的方法。
由于
答案 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;
}