ASP.Net Web API 带可选参数的路由
ASP.Net Web API Routing with optional parameters
我有一个 Web API 端点,如下所示 -
[HttpPost]
[ActionName("ResetPassword")]
public HttpResponseMessage ResetPassword(string userName, string Template, string SubjectKey,[FromBody] Dictionary<string, string> KeyWords)
如您所见,Web 有 4 个参数API。但是,除了第一个参数 'userName' 之外,所有其他参数都是可选的。所有参数均为字符串类型,默认可为空。
我已经使用基于约定的路由配置了路由(这是一个遗留项目)。
Config.Routes.MapHttpRoute(
name: "ResetPasswordResetV2",
routeTemplate: "Email/ResetPassword",
defaults: new { controller = "Email", action = "ResetPassword", routeValue = true });
我期待它能与任何一个一起工作 -
http://{base address}/V2/Core/Email/ResetPassword?userName=hdhd@hshshs.com&template=&subjectKey=
http://{base address}/V2/Core/Email/ResetPassword?userName=hdhd@hshshs.com
不工作。我得到一个 404。任何提示我做错了什么。我已经阅读了各种 SO 和文档链接,看起来有太多信息需要处理。
另外,这个'routeValue = true'
是什么意思?
更新:我在第一个 URL 上使用它,但我希望它也能在第二个 API 上使用。多一个信息,我的控制器还有一个具有相似输入参数集的动作,但动作名称不同(这会以任何方式搞砸吗?)
试试这个:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{userName}/{template}/{subjectKey}",
defaults: new { controller = "Email", action = "ResetPassword", template = UrlParameter.Optional, subjectKey = UrlParameter.Optional
});
其中,userName
是必填项,template
和subjectKey
是可选的。
URLs,看起来像这样(假设 template
等于 template1
并且 subjectKey
等于 3
):
http://{base address}/V2/Core/Email/ResetPassword/hdhd@hshshs.com/template1/3
或者,没有任何参数,只有 userName
:
http://{base address}/V2/Core/Email/ResetPassword/hdhd@hshshs.com
如果完全有必要,您可以将信息作为查询参数发送,但必须在 Controller 中指明。
URL 输入:
在 Controller
中收到的参数:
我有一个 Web API 端点,如下所示 -
[HttpPost]
[ActionName("ResetPassword")]
public HttpResponseMessage ResetPassword(string userName, string Template, string SubjectKey,[FromBody] Dictionary<string, string> KeyWords)
如您所见,Web 有 4 个参数API。但是,除了第一个参数 'userName' 之外,所有其他参数都是可选的。所有参数均为字符串类型,默认可为空。
我已经使用基于约定的路由配置了路由(这是一个遗留项目)。
Config.Routes.MapHttpRoute(
name: "ResetPasswordResetV2",
routeTemplate: "Email/ResetPassword",
defaults: new { controller = "Email", action = "ResetPassword", routeValue = true });
我期待它能与任何一个一起工作 -
http://{base address}/V2/Core/Email/ResetPassword?userName=hdhd@hshshs.com&template=&subjectKey=
http://{base address}/V2/Core/Email/ResetPassword?userName=hdhd@hshshs.com
不工作。我得到一个 404。任何提示我做错了什么。我已经阅读了各种 SO 和文档链接,看起来有太多信息需要处理。
另外,这个'routeValue = true'
是什么意思?
更新:我在第一个 URL 上使用它,但我希望它也能在第二个 API 上使用。多一个信息,我的控制器还有一个具有相似输入参数集的动作,但动作名称不同(这会以任何方式搞砸吗?)
试试这个:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{userName}/{template}/{subjectKey}",
defaults: new { controller = "Email", action = "ResetPassword", template = UrlParameter.Optional, subjectKey = UrlParameter.Optional
});
其中,userName
是必填项,template
和subjectKey
是可选的。
URLs,看起来像这样(假设 template
等于 template1
并且 subjectKey
等于 3
):
http://{base address}/V2/Core/Email/ResetPassword/hdhd@hshshs.com/template1/3
或者,没有任何参数,只有 userName
:
http://{base address}/V2/Core/Email/ResetPassword/hdhd@hshshs.com
如果完全有必要,您可以将信息作为查询参数发送,但必须在 Controller 中指明。
URL 输入:
在 Controller
中收到的参数: