我有一个Web API端点,如下所示 -
[HttpPost]
[ActionName("ResetPassword")]
public HttpResponseMessage ResetPassword(string userName, string Template, string SubjectKey,[FromBody] Dictionary<string, string> KeyWords)
如您所见,WebAPI有4个参数。但是,除了第一个参数'userName'之外,所有其他参数都是可选的。所有参数都是字符串类型,因此默认为nullable。
我已使用基于约定的路由配置路由(这是遗留项目)。
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。还有一个Info,我的控制器还有一个具有类似输入参数集的Action,但是动作名称是不同的(这可能会以任何方式弄乱它吗?)
答案 0 :(得分:1)
试试这个:
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
是可选的。
网址将如下所示(表示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中进行指示。
输入的网址:
Controller
收到的参数: