首页 > 解决方案 > 为什么 httpResponse.IsSuccessStatusCode 返回为 false?从 API 到 ASP.NET Core MVC?

问题描述

我有 3 层项目,我在 ASP.NET Core 上做数据库/API/MVC;所有控制器都正常工作,但此 API 控制器的连接不起作用。

这是我的业务层功能:

    public List<Ticket> ViewTickets()
    {
        try
        {
            using (var db = new MaintenanceSysContext(_options))
            {
                List<Ticket> tickets = null;
                List<int> ticketsId = db.Tickets.SelectMany(t => t.backOfficesTickets).Where(u => u.BackOfficeId == _backOfficeEntry.GetUserId()).Select(t => t.TicketId).ToList();
              
                foreach( var i in ticketsId)
                {
                    tickets = db.Tickets.Where(t => t.Id == i).ToList();
                }

                if (tickets != null)
                {
                    return tickets;
                }
                else
                {
                    return null;
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
    }

这是 API 中的控制器:

    [HttpGet]
    [Route("[action]")]
    [ActionName("ViewTickets")]
    public IActionResult  ViewTickets()
    {
        var tickets = _buildingManager.ViewTickets();
        return Ok(tickets);
    }

这是我的 ASP.NET Core MVChttpClient连接:

网址基础:

    HttpClient client = new HttpClient();

    public static string baseUrl = "http://localhost:16982/api/BuildingManagerAPI/";

ASP.NET Core MVC 控制器:

[HttpGet]
public async Task<ActionResult> GetTickets()
{
    List<Ticket> TicketList = new List<Ticket>();

    using (client)
    {
        var accessToken = HttpContext.Session.GetString("Token");
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var httpResponse = await client.GetAsync(baseUrl + "ViewTickets");

        if (httpResponse.IsSuccessStatusCode)
        {
            TicketList = await httpResponse.Content.ReadAsAsync<List<Ticket>>();
        }
    }
    
    return Json(TicketList, System.Web.Mvc.JsonRequestBehavior.AllowGet);
}

httpResponse.IsSuccessStatusCode我得到了一个值,false而 API 可以正常工作并在 Postman 中进行测试时返回正确的响应。我不知道我的连接问题是什么。

更新:

邮递员请求输出:

[
{
    "Id": 1,
    "BeneficiaryID": 4,
    "BeneficiaryUser": null,
    "backOfficesTickets": null,
    "StatusID": 2,
    "status": null,
    "ApprovalState": 2,
    "Date": "2021-08-22T00:00:00",
    "Picture": null,
    "MaintenanceTypeID": 1,
    "maintenanceType": null,
    "Description": "krng",
    "BuildingManagerComment": null,
    "FloorId": 1,
    "floor": null,
    "IsCancelled": false,
    "CancellationReasonID": null,
    "cancelationReason": null,
    "RejectedBy": null,
    "UserRejected": null,
    "RejectionReason": null,
    "CreatedBy": 4,
    "CreatedTime": "0001-01-01T00:00:00",
    "UpdatedBy": 0,
    "UpdatedTime": "0001-01-01T00:00:00",
    "IsDeleted": false
}

Red Point 没有获取 uri(客户端 uri=null),然后将 IsSuccessStatusCode 设置为 NULL。

标签: c#asp.net-core-mvcconnectionhttpclient

解决方案


尝试添加一个接受标头

....
 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

推荐阅读