Я создал проект VS MVC API с нуля, загрузил Nuget «WebApiContrib.Formatting.Jsonp», добавил маршрут, форматтер и попытался отправить параметры как сериализованный JSON в качестве запроса JSONP. Как определить или получить доступ к этим параметрам в контроллере?Как связать параметры API MVC в JSONP Get?
WebApiConfig:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{format}",
defaults: new { id = RouteParameter.Optional,
format = RouteParameter.Optional }
);
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());
Api Метод:
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
JQuery:
$.ajax({
type: 'GET',
url: '/api/Values',
data: JSON.stringify({ "message": "\"Hello World\"" }),
contentType: "application/json; charset=utf-8",
dataType: 'jsonp',
success: function (json) {
console.dir(json.sites);
},
error: function (e) {
console.log(e.message);
}
});
Я попытался модифицировать метод Api включать:
Get([FromUri] string value)
Get([FromBody] string value)
Get(CustomClass stuff)
Get([FromUri] CustomClass stuff)
Get([FromBody] CustomClass stuff)
Где CustomClass определяются как:
public class CustomClass
{
public string message { get; set; }
}
До сих пор ни один из них не производит ничего, кроме нуля для параметров. Как мне связать эти параметры с объектом, опубликованным в строке запроса?
EDIT:
я могу обмануть его, изменив Аякса JQuery быть:
data: {"value":JSON.stringify({ "message": "\"Hello World\"" })}
, для которых я могу де-stringify в [FromUri] string value
и получить мой сильно типизированный объект.
Тем не менее, я ожидаю, что связующее данные данных де-сериализует параметры для строго типизированных объектов. Какая техника делает это?
В настоящее время не очень уверен в точном решении, но попробуйте изменить параметр API имя файла для Id. i.e Получить ([FromUri] string id) .. См., если он работает. Может звучать из контекста, но просто попробуйте. – Shubh