在MVC中传递参数时,可以在Get操作方法中使用Bind属性吗?

时间:2019-01-14 12:41:51

标签: asp.net-mvc fortify

我在使用HPFortify时遇到另外2个错误,以及以下给定代码的主要问题:
1. ASP.NET MVC不良做法:未经防伪验证的控制器操作[注:由于Bind属性,它可能会询问此错误。因此,我将ValidateAntiForgeryToken放入代码中。但是,它再次要求将动词更改为POST]
2. ASP.NET MVC不良做法:控制器操作不限于POST
是正确的还是需要进行更改?

[AcceptVerbs(HttpVerbs.Get)]   
[ValidateAntiForgeryToken]    
public Actionresult Index([Bind(Include="Eid, Eage")]EmpModel objEmpModel)    
{   
return view(objEmpModel);    
} 

1 个答案:

答案 0 :(得分:0)

您可以简单地使用[HttpPost]来处理像这样的复杂对象:

[HttpPost]   
[ValidateAntiForgeryToken]    
public Actionresult Index(EmpModel objEmpModel)    
{   
return view(objEmpModel);    
}

或者,如果您想让代码正常工作,请使用以下代码:

[HttpGet]   
[ValidateAntiForgeryToken]    
public Actionresult Index([FromUri]EmpModel objEmpModel)    
{   
return view(objEmpModel);    
}  

注意:对于类之类的复杂类型,由于您使用的是[HttpGet]方法,因此web-api会尝试从主体读取数据,因此[FromUri]属性会覆盖默认值约定并从Uri而不是body读取数据。更多信息-https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api