我有一个简单的ASP.NET Core API,可使用javascript的fetch方法调用。但是SearchString属性类型的输入变量模型始终为null。
由于某种原因,当我使用Postman调用它时,它可以按预期工作,但不能从javascript中调用它。
API:
[HttpPost]
public async Task<IActionResult> Search([FromBody] BasicSearchModel model)
{
....
}
BasicSearchModel.cs:
public interface IBasicSearchModel
{
string SearchString { get; set; }
}
public class BasicSearchModel : IBasicSearchModel
{
public string SearchString { get; set; }
}
JavaScript:
const WebRequest = async (controller = "API", action, query = {}, data = {}, method = RequestMethods.POST, mode = RequestModes.SameOrigin, creds = RequestCredentials.SameOrigin, headers = {
"Content-Type": "application/json",
"Accept": "application/json"
}) => {
const GetUrl = () => {
var result = "/" + controller + "/" + action;
var i = 0;
for (var q in query) {
if (i === 0) {
result += "?";
} else {
result += "&";
}
result += q[0] + "=" + q[1];
i++;
}
return result;
}
await fetch(GetUrl(), {
method: method,
headers: headers,
// @ts-ignore
credentials: creds.toLowerCase(),
// @ts-ignore
body: data,
// @ts-ignore
mode: mode.toLowerCase(),
})
.then(response => {
if (response.ok) {
return new RequestResult(response);
} else {
throw new Error("Request failed: " + response.status + "; " + response.statusText);
}
})
.catch(error => {
throw new Error("Error: " + error.statusText);
});
};
JavaScript调用:
var result = await WebRequest("Identity", "Search", null, { SearchString: str });
要求:
标头:接受:“ application / json”,“ Content-Type”:“ application / json”
方法:“ POST”
身体:SearchString在: “测试仪”
使用Postman调用时,它的工作方式与预期的一样,很可能是因为其格式正确。
SearchString:“测试人员”
无效的JSON
待发送的数据
await fetch(GetUrl(), {
method: method,
headers: headers,
// @ts-ignore
credentials: creds.toLowerCase(),
// @ts-ignore
body: JSON.stringify(data), //<--NOTE
// @ts-ignore
mode: mode.toLowerCase(),
})
使其具有正确的格式,以供模型绑定程序解析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句