Asp.net 从代码隐藏文件调用时未经授权访问web api
我正在使用GuestController控制器类。我将从ajax和代码隐藏文件中访问这个getGuestBookingIDByRomidAPI方法。此方法在ajax调用时返回正确的结果,但在代码隐藏中出现“StatusCode:401,ReasonPhrase:‘Unauthorized’”错误 Api控制器:Asp.net 从代码隐藏文件调用时未经授权访问web api,asp.net,ajax,asp.net-mvc,asp.net-web-api,Asp.net,Ajax,Asp.net Mvc,Asp.net Web Api,我正在使用GuestController控制器类。我将从ajax和代码隐藏文件中访问这个getGuestBookingIDByRomidAPI方法。此方法在ajax调用时返回正确的结果,但在代码隐藏中出现“StatusCode:401,ReasonPhrase:‘Unauthorized’”错误 Api控制器: [Authorize] public class GuestController : ApiController { public int GetGuestBookingIdB
[Authorize]
public class GuestController : ApiController
{
public int GetGuestBookingIdByRoomId(int roomId)
{
return GuestManager.GetGuestBookingIdByRoomId(roomId);
} // GetGuestBookingIdByRoomId
}
Ajax调用:
function getGuestBookingIdByRoomId(roomId) {
$.ajax({
url: _pageURL + "/api/Guest/GetGuestBookingIdByRoomId",
type: "GET",
data: { roomId: roomId },
dataType: "json",
success: function (bookingId) {
if (bookingId != undefined && bookingId != null && bookingId > 0) {
_receiverBookingId = bookingId;
} else {
// Do Nothing
}
},
});
}
来自代码隐藏的api调用:
private int GetReceiverBookingId(int roomId)
{
int receiverBookingId = 0;
// Create object of http client
HttpClient client = new HttpClient();
// assign Base address
client.BaseAddress = new Uri("http://" + Request.Url.Authority);
// Set request header
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// build web api url
var url = "/api/Guest/GetGuestBookingIdByRoomId?roomId=" + roomId;
// Call web api method
HttpResponseMessage response = client.GetAsync(url).Result;
if (response.IsSuccessStatusCode) // If web api call is successfull
{
receiverBookingId = response.Content.ReadAsAsync<int>().Result;
}
else
{
}
return receiverBookingId;
}
private int GetReceiveBookingId(int roomId)
{
int receiverBookingId=0;
//http客户端的创建对象
HttpClient=新的HttpClient();
//分配基址
client.BaseAddress=新Uri(“http://”+Request.Url.Authority);
//设置请求头
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
//构建web api url
var url=“/api/Guest/getguestbookingdyromid?roomId=“+roomId;
//调用web api方法
HttpResponseMessageResponse=client.GetAsync(url).Result;
if(response.issucessStatusCode)//如果web api调用成功
{
receiverBookingId=response.Content.ReadAsAsync().Result;
}
其他的
{
}
返回接收方BookingId;
}
您正在使用的身份验证类型是什么?我正在使用“表单”身份验证尝试更改您的HttpClientHandler
如下HttpClientHandler hndlr=new HttpClientHandler();hndlr.UseDefaultCredentials=true;HttpClient=新的HttpClient(hndlr)代码>为什么从代码背后调用API?要做到这一点,您需要从客户端捕获身份验证cookie并将其传递给API,当然前提是您在WebForms和Web API之间共享身份验证。谢谢gabriel。您能否用示例代码详细说明如何将身份验证cookie传递给web api方法?