1

我有一個Web API端點像下面的東西路由 -ASP.Net的Web API使用可選參數

[HttpPost] 
[ActionName("ResetPassword")] 
public HttpResponseMessage ResetPassword(string userName, string Template, string SubjectKey,[FromBody] Dictionary<string, string> KeyWords) 

正如你看到的,有4個參數到的WebAPI。但是,除第一個參數'userName'外,其他所有參數都是可選的。所有參數都是字符串類型,默認爲空。

我已經使用基於約定的路由配置了路由(這是一個傳統項目)。

Config.Routes.MapHttpRoute(
      name: "ResetPasswordResetV2", 
      routeTemplate: "Email/ResetPassword", 
      defaults: new { controller = "Email", action = "ResetPassword", routeValue = true }); 

我期待它與任何工作 -

http://{base address}/V2/Core/Email/[email protected]&template=&subjectKey= 
http://{base address}/V2/Core/Email/[email protected] 

不工作。我得到了404.任何提示我做錯了什麼。我已經閱讀過所有的SO和DOC鏈接,並且看起來有太多的信息需要處理。

另外,這個'routeValue = true'是什麼意思?

更新:我得到它與第一個URL的工作,但我會期望它也與第二個API一起工作。還有一個信息,我的控制器有一組類似的輸入參數多了一個動作,但動作的名稱是不同的(可以以任何方式搞砸了?)

+0

你需要澄清什麼是不工作的手段。你有錯誤嗎?是行動命中但參數爲空。期望的行爲是什麼? – Nkosi

+0

我更新了我的問題。基本上我得到了一個404. – Dibzmania

+0

然後你需要提供一個[mcve],可以用來重現問題。顯示更多的目標控制器。以及更多路線配置。這些通常是可能導致您的問題的兩個主要方面。 – Nkosi

回答

1

試試這個:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{userName}/{template}/{subjectKey}", 
    defaults: new { controller = "Email", action = "ResetPassword", template = UrlParameter.Optional, subjectKey = UrlParameter.Optional 
}); 

其中,userName是必需的,但templatesubjectKey是可選的。

網址,看起來就像這樣(supoussing即template等於template1subjectKey等於3):

http://{base address}/V2/Core/Email/ResetPassword/[email protected]/template1/3 

或者說,沒有任何參數,可以只userName

http://{base address}/V2/Core/Email/ResetPassword/[email protected] 

如果完全必要,您可以將信息作爲查詢參數發送,但是您必須在Controller中指示。

URL輸入:在Controller收到

enter image description here

PARAMS:

enter image description here

+0

在我的情況下,客戶端發送參數作爲查詢參數的一部分。在你顯示的例子中,這些參數是作爲路由值的一部分發送的。有沒有辦法對查詢參數做同樣的事情? – Dibzmania

+0

我只是做了一個測試,是的,它可以作爲查詢參數發送,我會更新我的答案 – Flxtr