首页 » 后端 » .Net MVC中使用id为参数可能导致的问题

.Net MVC中使用id为参数可能导致的问题

 

MVC默认的路由设置如下:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

我们常定义的model类一般都包含"ID"字段,类似:

class Foo {
    public int Id { get; set; }
}

在Controller中我们的action也写作:

public FooController {
    [HttpPost]
    public ActionResult Edit(int id, Foo foo) {

    }
}

一般情况下并不会导致什么问题,因为从数据库的内容也是根据当前ID取出的。
特殊情况下,比如用户的权限仅限于修改ID为1的内容(任何页面都会获取ID为1的内容),当用户手动修改URL链接中的ID为2的时候,Controller读到的ID为真实ID(1),但是在View中显示的ID值确实URL中的值(2),这会导致想要修改ID为1的内容,实际上却是修改到ID为2的内容。

总结:MVC中route的ID会覆盖model中的ID,导致页面部分数据显示错误

修改方法也很简单,不使用ID为参数即可
// route

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{identifier}", // URL with parameters
    new { controller = "Home", action = "Index", identifier = UrlParameter.Optional } // Parameter defaults
);

// controller

public FooController {
    [HttpPost]
    public ActionResult Edit(int identifier, Foo foo) {

    }
}

原文链接:.Net MVC中使用id为参数可能导致的问题,转载请注明来源!