Я пытаюсь выяснить безумие, лежащее в основе маршрутизации веб-API.Как я могу MapHttpRoute POST выполнить пользовательское действие с помощью WebApi?
При попытке опубликовать данные, как это:
curl -v -d "test" http://localhost:8088/services/SendData
Я получаю 404, и следующее сообщение об ошибке:
{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:8088/services/SendData'.","MessageDetail":"No action was found on the controller 'Test' that matches the request."}
Вот код для моего тестового сервера.
public class TestController : ApiController
{
[HttpPost]
public void SendData(string data)
{
Console.WriteLine(data);
}
}
class Program
{
static void Main(string[] args)
{
var config = new HttpSelfHostConfiguration("http://localhost:8088");
config.Routes.MapHttpRoute(
name: "API Default",
routeTemplate:"services/SendData",
defaults: new { controller = "Test", action = "SendData"},
constraints: null);
using (var server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
}
}
В целом, почему команда ASP.NET решила сделать метод MapHttpRoute настолько запутанным. Почему требуется два анонимных объекта ... как кто-то должен знать, какие свойства действительно нужны этим объектам?
MSDN не дает никакой помощи: http://msdn.microsoft.com/en-us/library/hh835483(v=vs.108).aspx
Все боль динамически типизированных языка без каких-либо пользы, если вы спросите меня ...
Это работает ... и атрибут ActionName на самом деле не нужен. – Darragh
@ Darragh Имя действия потребуется, если у вас есть несколько методов с атрибутом HttpPost. –