1

我可以测试查询字符串参数:

Request.QueryString["value"].IsEmpty()
Request.QueryString["value"].Isint()
Etc.

但是我怎样才能避免根本没有查询字符串呢?换句话说,我希望prevent用户访问the root每个文件夹或子文件夹。

    http://localhost:16838/auth/provider.cshtml

instead of:

    http://localhost:16838/auth/provider.cshtml?providerId=7

如果我删除查询字符串(直到页面扩展名),我会收到cannot perform runtime binding on a null reference错误,因为代码的下一部分仍在执行。

相反,我希望用户redirect成为400 BAD REQUEST

The request could not be understood by the server due to malformed syntax.
The client SHOULD NOT repeat the request without modifications
4

2 回答 2

1

如果您想确保根本没有查询字符串值,您可以检查Request.ServerVariables["QUERY_STRING"]

http://msdn.microsoft.com/en-us/library/system.web.httprequest.servervariables.aspx

但是,您很可能想要检查单个值,您应该能够做到这一点:

if(Request.QueryString["key"] == null || Request.QueryString["key"].IsEmpty()) 
{
  // redirect
}
于 2012-09-27T18:05:07.507 回答
0

用户不能通过省略查询字符串值来“访问文件夹的根目录”。如果他们请求http://localhost:16838/auth/provider.cshtml而不是http://localhost:16838/auth/provider.cshtml?providerId=7任何依赖于Request["providerId"]具有值的代码都可能会崩溃,那么将会发生的所有事情。

如果要测试查询字符串值是否存在,只需要使用 IsEmpty():

if(Request["providerId"].IsEmpty()){
    //the value is missing. Redirect ot a safe page or provide a default value
} else {
    //run your code
}
于 2012-09-27T19:21:10.153 回答