我問過類似的問題here前一陣,但並沒有真正句話非常好或解釋什麼正確我正在努力實現。我再試一次,並試圖解釋它好一點!最簡潔的處理動作的路由,同時保持默認路由GET和ASP.NET核心POST行爲2.0 MVC
我有無數個控制器是這一切(現在)有一些變化的ASP.NET 2.0的核心網絡API項目:
[Route("api/[controller]")]
public class ExampleController : Controller
{
[HttpGet]
public MyType Get() => GetMyTypeFromSomewhere();
[HttpPost]
public void Post([FromBody]updated) => UpdateMyType(updated);
[HttpGet("[action]")]
public void SelectedOption() => Options.GetSelectedOption();
[HttpPost("[action]")]
public void SelectOption([FromBody]int id) => Options.SelectOption(id);
[HttpDelete("[action]")]
public void DeleteOption([FromBody]Guid id) => Options.DeleteOption(id);
}
你大概可以從連這個簡單的例子看,這是很煩人有包括[Route("api/[controller]")]
每個控制器的頂部,更是讓有包含在HTTP動詞("[action]")
每個非默認操作的屬性。
我希望能夠有默認路由Get()
和Post()
的請求沒有指定動作,但仍然規定時,其他動作路線 - 並能夠實現這一目標,而不必每一個控制器和方法來標記與該死的東西。
例如:
- GET mysite.com/api/Example
應返回的MyType的實例 - POST mysite.com/api/Example
應該採取一個實例MyType - GET mysite.com/api/Example/SelectedOption
應該返回一個int - POST mysite.com/api/Example/SelectOption
應該採取一個int - DELETE mysite.com/api/Example/DeleteOption
應該採取一個int
我已經試過圖路線和不同類型的控制器和方法裝飾的多種不同的組合,但無法找到任何替代標記與("[action]")
絕對一切。
使用app.addMvc
MapRoute
如果我指定{action}
不會因爲工作,我不能達到get()和郵政()無需添加/獲取或/後我的請求結束(有與{action?}
沒有區別)。
我已經得到的最接近爲{action=Get}
,哪些路由度日默認的方法,但休息到達默認POST方法的能力。
這甚至可能,如果是這樣,沒有人知道如何?
,我不認爲這是可能的開箱,但我敢肯定,你可以使用自己的路由系統實現它。 [這](https://weblogs.asp.net/imranbaloch/custom-routing-aspnet5-mvc6)似乎是一個體面的開始。 – Jonesopolis
另外,你應該使用PUT來實現更新值的冪等方法。 POST用於添加值。 –