Tôi đã tạo một giải pháp WebAPI mới trong studio trực quan và đang phát xung quanh với mã để thử và hiểu những gì đang xảy ra.WebAPI2.0 Yêu cầu mã thông báo OWIN bằng cách sử dụng JSON
Tôi có một API kiểm tra thats tất cả và chạy với một bộ điều khiển ủy quyền và bộ điều khiển khác thực hiện tất cả các chức năng thực tế.
Các bộ điều khiển (API) tất cả các công việc bằng cách nhận JSON và trả lời với JSON, với ngoại lệ của/Mã request.This phải là:
Content-Type: application/x-www-form-urlencoded
nếu không tôi chỉ nhận được một lỗi trở lại.
Phần mã mà tạo ra thiết bị đầu cuối này dường như là điều này:
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
};
Gọi nó như thế này dẫn đến một phản ứng 200 thành công, với một mã thông báo Bearer:
$("#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;
});
});
Gọi nó như điều này dẫn đến 400 phản hồi:
$("#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;
});
});
Nội dung phản hồi là:
{"error":"unsupported_grant_type"}
Sự khác biệt duy nhất ở đây là mã hóa được sử dụng để truyền yêu cầu. Mọi nơi tôi xem tất cả các ví dụ đều sử dụng mã hóa biểu mẫu để yêu cầu mã thông báo này.
Đặt điểm ngắt trên mã trong/api/Account/ExternalLogin, không bao giờ bị trúng.
Có lý do nào để điều này chỉ chấp nhận mã hóa biểu mẫu không? và nếu không làm thế nào tôi có thể thay đổi bộ điều khiển để chấp nhận JSON?
Hoặc là tôi vừa làm điều gì đó ngu ngốc?
Không cần phải'JSON.stringify (dữ liệu) ' –
Cảm ơn @gauravbhavsar hoạt động ngay bây giờ. Nếu bạn đăng câu trả lời đó, tôi sẽ đánh dấu là đúng. Tôi đoán rằng làm tăng câu hỏi tại sao tôi cần phải JSON.stringify dữ liệu được đăng lên các thiết bị đầu cuối khác nhưng không phải là một trong những? Tôi chỉ thử nghiệm nó và tôi cần phải. Tôi sẽ đào bới và xem tôi có thể làm được không. – Morvael