我已經在visual studio中創建了一個新的WebAPI解決方案,並且正在玩弄代碼來嘗試理解正在發生的事情。WebAPI2.0使用JSON的OWIN令牌請求
我有一個測試API,它們都與一個授權控制器和另一個實現所有實際功能的控制器一起運行。
的控制器(API)通過接收JSON和JSON的回覆,與/令牌request.This之外的所有工作必須是:
Content-Type: application/x-www-form-urlencoded
否則,我只是得到一個錯誤回來。
的代碼創建該端點的部分似乎是這樣的:
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = false
};
調用它像這樣導致200成功響應,具有承載的令牌:
$("#token_button").click(function()
{
var username = $("#token_email").val();
var password = $("#token_password").val();
postData("Token", "grant_type=password&username=" + username + "&password=" + password, "application/x-www-form-urlencoded", function (data)
{
user = data;
$("#feedback_display").html(user.access_token);
}, function()
{
user = null;
});
});
調用它像這導致400響應:
$("#token_button").click(function()
{
var username = $("#token_email").val();
var password = $("#token_password").val();
var data = {
"grant_type": "password",
"username": username,
"password": password
}
postData("Token", JSON.stringify(data), "application/json", function (data)
{
user = data;
$("#feedback_display").html(user.access_token);
}, function()
{
user = null;
});
});
響應正文是:
{"error":"unsupported_grant_type"}
這裏唯一的區別是用於傳輸請求的編碼。 每一個我看所有的例子都使用表單編碼來請求這個令牌。
在/ api/Account/ExternalLogin下的代碼上放置一個斷點,永遠不會被擊中。
這是唯一一個接受表單編碼的原因嗎?如果沒有,我怎麼能改變控制器接受JSON?
或者我只是做了一些愚蠢的事情?
不需要'JSON.stringify(data)' –
感謝@gauravbhavsar現在的作品。如果您將其作爲答案發布,我會標記爲正確。我想這引發了問題,爲什麼我需要JSON.stringify發佈到其他端點的數據,但不是那個?我只是測試它,我確實需要。我會仔細研究一下,看看我能不能解決問題。 – Morvael