HTTP Get或Post返回空JSON数组

时间:2017-07-10 13:02:37

标签: asp.net json asp.net-mvc angular

当我调用我的API Webservice时,它返回一个空数组。

在我的Header请求中,我只有一个用于身份验证的jwt令牌

在Angular中:

getSheets(): Observable<Sheet[]> {
return this.http.get(this.config.apiUrl + '/api/SheetsRelationAPI', this.jwt())
  .map(this.extractData)
  .do(data => console.log('SheetsData:', data))  // debug
  .catch(this.handleError);

在Asp.net MVC 5中:

[HostAuthentication("bearer")]
[System.Web.Http.Authorize]
public class SheetsRelationAPIController : ApiController
{
    private GSheetsContext db = new GSheetsContext();

    // GET: api/SheetsRelation

    [ResponseType(typeof(SheetsRelationView))]
    public IQueryable<SheetsRelationView> GetSheetsRelation()
    {

        var claims = (User.Identity as System.Security.Claims.ClaimsIdentity).Claims;
        var username = "";
        foreach (var claim in claims)
            if (claim.Type.ToString() == "sub")
            {
                username = claim.Value.ToString();
            }
        //var tasks = from tsk in db.SheetsRelation.Include(s => s.SheetsContent.id  )
        //select tsk;

        var sheetsRelation = db.SheetsRelationView.Where(jt => jt.Username == username);




        return sheetsRelation;
    }
}

更新1:

似乎它在PostMan中有效,我有一个响应的JSON但是在Angular中,我没有任何JSON作为回应。

1 个答案:

答案 0 :(得分:1)

您可能希望尝试三件事 -

  1. 与此问题无关,但我总是使用特定的http方法修饰我的API,以确保我没有任何混淆 - 在这种情况下[HttpGet]

  2. 重构您的API类,使其与GSheetsContext和User.Identity没有直接的依赖关系(让自己成为一个注射服务来处理它,以便您可以模拟行为。)

  3. 使用模拟依赖项对控制器方法进行单元测试,以便确保控制器的行为符合预期。

  4. 编辑,如果这听起来太多了

    注释掉现有的控制器逻辑,并在其中放置一个只返回return db.SheetsRelationView.Create()

    之类的存根方法

    如果可行,那么您知道您的问题不在于您的API,而在于逻辑。然后参考步骤2&amp; 3以上;)