【问题标题】:Why is httpResponse.IsSuccessStatusCode returned as false? From an API to ASP.NET Core MVC?为什么 httpResponse.IsSuccessStatusCode 返回为 false?从 API 到 ASP.NET Core MVC?
【发布时间】:2021-08-18 20:20:50
【问题描述】:

我有 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 MVC httpClient 连接:

网址基础:

    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。

【问题讨论】:

  • 您是否设置了断点并检查了httpResponse?您应该能够从中获取异常消息或其他一些信息,以确定手头问题的至少一个起点。根据您提供的信息,这里没有人能够确定问题所在。
  • 您能否将邮递员输出的图片连同最终请求一起发布?
  • In the httpResponse.IsSuccessStatusCode I get back a value of false确切状态码是什么?
  • foreach( var i in ticketsId) { tickets = db.Tickets.Where(t =&gt; t.Id == i).ToList(); } 这是一个非常奇怪的循环。它要么是错误的,要么是非常低效的,这取决于你期望它做什么。
  • PostMan 上的响应代码是什么?

标签: c# asp.net-core-mvc connection httpclient


【解决方案1】:

尝试添加接受标头

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

【讨论】:

    【解决方案2】:

    问题出在令牌中(不进行索赔),我们修复了它。谢谢大家。

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2014-11-17
      • 2014-03-11
      • 2019-07-12
      相关资源
      最近更新 更多