Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 从代码隐藏文件调用时未经授权访问web api_Asp.net_Ajax_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

Asp.net 从代码隐藏文件调用时未经授权访问web 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

我正在使用GuestController控制器类。我将从ajax和代码隐藏文件中访问这个getGuestBookingIDByRomidAPI方法。此方法在ajax调用时返回正确的结果,但在代码隐藏中出现“StatusCode:401,ReasonPhrase:‘Unauthorized’”错误

Api控制器:

[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方法?