我试图使用IHttpActionResult将JSON结果返回给我的客户端。
我的.Net代码,如下所示:
[AllowAnonymous, HttpPost, Route("")]
public IHttpActionResult Login(LoginRequest login)
{
if (login == null)
return BadRequest("No Data Provided");
var loginResponse = CheckUser(login.Username, login.Password);
if(loginResponse != null)
{
return Ok(new
{
message = "Login Success",
token = JwtManager.GenerateToken(login.Username, loginResponse.Roles),
success = true
});
}
return Ok( new
{
message = "Invalid Username/Password",
success = false
});
}
这不起作用,因为我在JavaScript抓取后似乎从未在响应中看到JSON:
const fetchData = ( {method="GET", URL, data={}} ) => {
console.log("Calling FetchData with URL " + URL);
var header = {
'Content-Type': "application/json",
}
// If we have a bearer token, add it to the header.
if(typeof window.sessionStorage.accessToken != 'undefined')
{
header['Authorization'] = 'Bearer ' + window.sessionStorage.accessToken
}
var config = {
method: method,
headers: header
};
// I think this adds the data payload to the body, unless it's a get. Not sure what happens with a get.
if(method !== "GET") {
config = Object.assign({}, config, {body: JSON.stringify(data)});
}
// Use the browser api, fetch, to make the call.
return fetch(URL, config)
.then(response => {
console.log(response.body);
return response;
})
.catch(function (e) {
console.log("An error has occured while calling the API. " + e);
});
}
正文中没有可用的JSON。 我如何回到我的客户端进行解析? response.body没有json对象。
使用条带的建议:console.log(response.json())
我在那里看到了这个消息。它似乎在错误的地方。它不应该在体内吗?
答案 0 :(得分:2)
抓取就像这样
身体方法
访问响应主体的每个方法都返回一个Promise 将在关联数据类型准备好后解析。
text() - 将响应文本生成为String
json() - 产生JSON.parse(responseText)的结果
blob() - 产生一个Blob
arrayBuffer() - 产生一个ArrayBuffer
formData() - 生成可以转发到另一个请求的FormData
我认为你需要
return fetch(URL, config)
.then(response => response.json())
.catch(e => console.log("An error has occured while calling the API. " + e));
doc here:https://github.github.io/fetch/
答案 1 :(得分:-1)
您正在发出GET请求,但您的控制器方法正在等待POST请求。