私は同様の質問hereを少し前に聞いたことがありますが、私は達成しようとしています。私はもう一度やり直して、もう少し説明しようとしています!ASP.NET Core 2.0のGETおよびPOSTアクションへのデフォルトルートを維持しながらアクションルーティングを処理する最も簡潔な方法MVC
私はこのすべて(現在は)いくつかのバリエーションある多数のコントローラとASP.NETコア2.0のWeb 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型
がint
を取る必要があります返す必要があります
MapRouteとコントローラとメソッドの装飾の種類がさまざまですが、実際には("[action]")
ですべてをマークする代替方法は見つかりませんでした。 app.addMvc
でMapRoute
を使用して
は私が{action}
を指定した場合、私のリクエストの最後にか/ポストを取得/ を追加せずに、私は()を取得達することができないとポスト()ので動作しません(あり{action?}
との違いはありません)。
私が得た最も近いものは{action=Get}
で、これはデフォルトでGETメソッドにルーティングされますが、デフォルトのPOSTメソッドに到達する能力はありません。
これも可能ですか?その場合は誰でも知っていますか?
:ここ
は、Idは、あなたのコントローラーを書く方法です。 [This](https://weblogs.asp.net/imranbaloch/custom-routing-aspnet5-mvc6)は、まともなスタート地点のようです。 – Jonesopolis
値を更新する冪等のメソッドには、PUTを使用する必要があります。 POSTは値を追加するためのものです。 –