RouteConfig.cs に次のルート構成があります。
// notes for a receipt
routes.MapHttpRoute(
name: "Get Notes for a receipt",
routeTemplate: "receipt/{ReceiptID}/notes",
defaults: new {
controller = "Receipt",
action = "GetNotes",
ReceiptID = RouteParameter.Optional
}
);
一致する URL へのすべての GET 要求は、このメソッドにルーティングされます。
/// <summary>
/// retrieve notes for a receipt
/// </summary>
/// <param name="ReceiptID">receipt guid</param>
/// <returns>list of notes</returns>
[HttpGet]
public List<NoteDTO> GetNotes(Guid ReceiptID)
{
try
{
IEnumerable<tNotes> Notes = Retriever.GetNotes(ReceiptID);
return ObjectMapper.MapNotes(Notes);
}
catch (Exception)
{
// TODO more granular error handling
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
}
これはうまくいきます。ただし、まったく同じ URL に POST 要求を送信できるようにしたいのですが、別のメソッドを呼び出します。しかし、405 メソッドが許可されていません:「要求されたリソースは http メソッド 'POST' をサポートしていません。」
[HttpPost] アノテーションを呼び出したいメソッドに追加しましたが、Http リクエスト タイプをルーティング構成に追加する方法がありません。
私はこのようなものを探していると思います:
defaults: new {
controller = "Receipt",
httpMethod = "POST, // specify http method
action = "GetNotes",
ReceiptID = RouteParameter.Optional
}