在ASP.NET MVC的几个早期预览版本中,控制器方法的参数会通过检查查询字符串、表单、Cookie和服务器变量集合来解析,详见Stephen Walther的这篇文章。
例如,以下代码曾经可以使用:
但是现在运行到发布候选版本时,它会抛出一个异常,因为它找不到userId的值,即使userId明确出现在请求cookies中。
例如,以下代码曾经可以使用:
public class MyController : Controller {
// This should bind to Request.Cookies["userId"].Value
public ActionResult Welcome(int userId) {
WebUser wu = WebUser.Load(userId);
ViewData["greeting"] = "Welcome, " + wu.Name;
return(View());
}
}
但是现在运行到发布候选版本时,它会抛出一个异常,因为它找不到userId的值,即使userId明确出现在请求cookies中。
这个变化在发布说明中有提到吗?如果这是框架的改变,现在是否有推荐的替代方法来绑定 cookies 和服务器变量?
编辑: 感谢那些已经回复的人。我可能选择了一个不好的例子来证明这一点; 我们的代码使用cookies来方便但非必要地保持各种形式的"方便"数据(记住搜索结果的顺序之类的东西),因此它并不纯粹是认证问题。依赖用户 cookies 的安全性问题已经被充分记录; 我更感兴趣的是当前灵活易测试的技术来检索cookie值的建议。 (如您所知,上面的示例可能具有安全风险,但非常容易测试!)