当我调用我的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作为回应。
答案 0 :(得分:1)
您可能希望尝试三件事 -
与此问题无关,但我总是使用特定的http方法修饰我的API,以确保我没有任何混淆 - 在这种情况下[HttpGet]
。
重构您的API类,使其与GSheetsContext和User.Identity没有直接的依赖关系(让自己成为一个注射服务来处理它,以便您可以模拟行为。)
使用模拟依赖项对控制器方法进行单元测试,以便确保控制器的行为符合预期。
编辑,如果这听起来太多了
注释掉现有的控制器逻辑,并在其中放置一个只返回return db.SheetsRelationView.Create()
如果可行,那么您知道您的问题不在于您的API,而在于逻辑。然后参考步骤2&amp; 3以上;)