【发布时间】:2016-03-24 18:47:17
【问题描述】:
这可能不是很清楚,所以让我详细说明一下:
据我所知,web api 控制器的“动作”是由参数的数量和类型决定的。因此,如果您传入两个字符串,您将获得在方法签名中包含两个字符串的 Get 或 Post。
我想做的是设置几条这样的路线:
config.Routes.MapHttpRoute(
name: "fileFunctionsDelete",
routeTemplate: "api/{controller}/{appName}/{userID}/Delete",
defaults: new {
appName = RouteParameter.Optional,
userID= RouteParameter.Optional,
fileAction= RouteParameter.Optional
}
);
config.Routes.MapHttpRoute(
name: "fileFunctionsUpload",
routeTemplate: "api/{controller}/{appName}/{userID}/Upload",
defaults: new {
appName = RouteParameter.Optional,
userID= RouteParameter.Optional,
fileAction= RouteParameter.Optional
}
);
这些显然应该转到同一个控制器,但在 MVC 网站中,我会转到名为“删除”或“上传”的操作。
到目前为止,我看到的只是 Gets 和 Posts,其中包含用于确定调用的参数的数量和类型。这太令人困惑了。
有什么方法可以让它在调用行为上更像“MVC 网站”?
澄清一下:如果我想触发一个特定的动作,我会直呼其名。 “public ActionResult ThisAction(object[] params)。在 web api 中,所有的签名都像 Get 或 Put 或 Post。我希望能够说像“url:../Delete”这样的话,它会调用适当的删除获取或发布。我不想通过传入的参数数量来区分我的方法或解析字符串以查看用户的意图。这些都是失败的秘诀
更新:
Kenneth、lgor 和 Tu Hoang 的答案都包含需要综合考虑的关键信息(限制路线、动作、模型属性等的方法),并且每个人都包含可以得出完整答案的信息。我无法全部标记,所以我将我的问题标记为“最正确”。
【问题讨论】:
-
我不明白你的问题,MVC 控制器和 WebAPI 控制器在很大程度上是同一件事,实际上在 ASP.NET MVC Core 中它们结合了所有内容。是什么让您感到困惑?
-
如果我想触发一个特定的动作,我会直呼其名。 “public ActionResult ThisAction(object[] params)。在 web api 中,所有的签名都像 Get 或 Put 或 Post。我希望能够说像“url:../Delete”这样的话,它会调用适当的删除获取或发布。我不想通过传入的参数数量来区分我的方法或解析字符串以查看用户的意图。这些都是失败的秘诀。
-
对不起,如果我很密集,您是否想了解如何在控制器上使用 HTTP 动词以及如何使用
Html.ActionLink和这些动词? -
你看过attribute routing了吗?它比修改路线配置更专注于应用,IMO。
-
你注意到链接文章的标题了吗?
标签: c# asp.net-mvc-4 asp.net-web-api asp.net-web-api-routing