Используя angular, я пытаюсь отправить некоторые почтовые данные в DnnApiController, используя $ http.post:
findit: function(onSuccess, onFailure,searchTerms) {
alert(JSON.stringify(searchTerms));
const rvtoken = $("input[name='__RequestVerificationToken']").val();
$http({
cache: false,
dataType: 'json',
url: "/DesktopModules/AdvancedProductSearchAPI/API/AdvancedProductSearchApi/DoAdvancedSearch",
method: "Post",
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
},
data: { "": JSON.stringify(searchTerms) }
}).success(onSuccess).error(onFailure);
----. Метод ajax ----
findit: function(onSuccess, onFailure,searchTerms) {
alert(JSON.stringify(searchTerms));
const rvtoken = $("input[name='__RequestVerificationToken']").val();
$.ajax({
cache: false,
dataType: 'json',
url: "/DesktopModules/AdvancedProductSearchAPI/API/AdvancedProductSearchApi/DoAdvancedSearch",
method: "Post",
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
},
data: { "": JSON.stringify(searchTerms) }
}).success(onSuccess).error(onFailure);
Обновление 2018/09/02
Я пробовал это:
$http.post("/DesktopModules/AdvancedProductSearchAPI/API/AdvancedProductSearchApi/DoAdvancedSearch3",
searchTerms,
{
headers: {
"ModuleId": moduleId,
"TabId": tabId,
"RequestVerificationToken": rvtoken
}
}).success(onSuccess).error(onFailure);
Вот мой метод DnnApiController, который вызывается:
[AllowAnonymous]
[DotNetNuke.Web.Api.ValidateAntiForgeryToken]
public string DoAdvancedSearch([FromBody] string advancedSearchItems)
{
IList<SearchTerm> SearchTerms = JsonConvert.DeserializeObject<List<SearchTerm>>(advancedSearchItems);
return JsonConvert.SerializeObject(SearchTerms);
}
или
public string DoAdvancedSearch2([FromBody] IList<SearchTerm> SearchTerms)
{
//IList<SearchTerm> SearchTerms = JsonConvert.DeserializeObject<List<SearchTerm>>(advancedSearchItems);
return JsonConvert.SerializeObject(SearchTerms);
}
или
[HttpPost]
[AllowAnonymous]
[DotNetNuke.Web.Api.ValidateAntiForgeryToken]
[Route("doadvancedsearch3")]
public string DoAdvancedSearch3(IList<SearchTerm> SearchTerms)
{
//IList<SearchTerm> SearchTerms = JsonConvert.DeserializeObject<List<SearchTerm>>(advancedSearchItems);
return JsonConvert.SerializeObject(SearchTerms);
}
Все apis запускаются из команды $ http.post в зависимости от того, какой api я вызываю. Но метод $ http.post приводит к нулевому значению параметра API (advancedSearchItems), в то время как метод .ajax работает очень хорошо во всех случаях.
Чего мне не хватает в методе $ http?