C# MVC - 路由问题/混乱

C# MVC - Routing Issue / Confusion

我正在 .NET 4 框架的 ASP.NET MVC C# 中开发一个应用程序。

我在 routing 中感到困惑,我进行了研究并开发了一个演示版本它按我想要的方式工作,但我想知道哪种方法是开发应用程序的最佳实践。

首先我这样注册路由:

routes.MapRoute(
                name: "RoutesTesting",
                url: "{controller}/{action}/{a}/{b}/{c}/{d}/{e}",
                defaults: new { controller = "Home", action = "Test", e = UrlParameter.Optional }
                );

我有一个 class 具有属性,它的名称与路由参数相同。

class MyClass{
    public string a{get;set;}
    public string b{get;set;}
    public string c{get;set;}
    public string d{get;set;}
    public string e{get;set;}
}

现在我创建了两个有效的方法,可以成功地从 URL 中查找和获取数据。

方法一:

public ActionResult Test(MyClass objMyClass){

}

方法二:

public ActionResult Test(string a,string b,string c,string d,string e=String.Empty){

}

我的问题是:

  1. 路由是否在我的操作方法中进行该对话?喜欢它转换“MyClass”对象属性中的参数值吗?

  2. 哪种方法最适合使用?

  3. 当无法进行对话时,方法 1 是否会抛出任何错误或异常?

提前致谢...

看看How model binding works

Is routing doing that conversation in my action method? Like it convert the parameter values in the `MyClass' object's properties?

框架模型绑定器正在根据操作参数进行转换。

Which method is best practice to use?

这是一个自以为是的问题。取决于哪一个适合您的需求。该框架处理两者。

Is method 1 will throw any error or exception when the conversation is not possible ?

模型绑定器会将 null 传递给不匹配属性的操作参数。

您看到的行为是 ASP.NET 模型绑定的一部分。它是让您发送 {"firstName":"Jonathon","lastName":"Chase"} 的 JSON 对象并且必须自动映射到如下所示的模型 Person 的魔法:

public class Person {
    public string FirstName {get;set;}
    public string LastName {get;set;}
}

您可以创建这样的路线这一事实仅仅是由此产生的结果。模型绑定是一个复杂的主题,但我可以谈谈您如何形成路线的某些方面,特别是如果您创建的操作会产生副作用,例如写入数据库。

通常情况下,如果您要有一个会影响状态的方法,您应该使用 Get 以外的 Http 动词,并在请求正文中发送模型,而不是在 query/url 细绳。无论哪种方式,模型绑定都会为您处理映射。

您应该更喜欢使用强大的模型而不是多个基元作为参数,尤其是在信息将通过查询字符串在请求正文中发送的情况下。

然而,这些要点值得商榷,在大多数情况下不应被视为硬性或快速规则。

至于你的最后一点,如果参数不正确以至于路由无法识别操作或控制器,你应该得到一个 404。但是,如果你有一个不能像预期的那样为空的值类型routed 属性 未正确发送,您应该期待一个带有 InvalidOperationException 的 500。