Способ публикации ASP.NET WebApi - 404 При передаче параметров
Я не могу для жизни понять это. У меня есть контроллер веб-api с методами Get и Post. Метод Get отлично работает с параметрами и без них, но пост ломается, когда я пытаюсь добавить к нему параметр String. Ниже мой код.
Маршрут:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = UrlParameter.Optional }
);
Контроллер:
public class AuditController : ApiController
{
public String Post(String test)
{
return "Success : " + test;
}
public String Get(String test)
{
return "Success : " + test;
}
}
Запрос:
var request = WebRequest.Create("http://localhost:42652/Audit");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write("test=TEST");
}
WebResponse webResponse = request.GetResponse();
Я пробовал много вариантов запроса, я чувствую, что там что-то простое, что мне не хватает. Благодарим за помощь.
Ответы
Ответ 1
Поскольку вы ожидаете, что параметр test
должен поступать из тела запроса, вам нужно будет украсить его атрибутом FromBody
. Пример: ([FromBody]String test)
. Это не относится к другим сложным типам, например: Employee
класс, который неявно считается прибывающим из тела.
Завершение запроса GET. Он должен работать только с тестом, исходящим из строки запроса /Audit?test=Mike
В следующем сообщении блога есть более подробная информация о привязке параметров:
http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
Кроме того, я вижу, что вы используете WebRequest. Вы рассматривали использование HttpClient из System.Net.Http вместо этого?
Ответ 2
Измените свой AuditController
, чтобы включить атрибут FromBody
:
public class AuditController : ApiController
{
public String Post([FromBody]String test)
{
return "Success : " + test;
}
public String Get(String test)
{
return "Success : " + test;
}
}
ср. http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute(v=vs.108).aspx