【发布时间】:2017-04-20 05:39:27
【问题描述】:
我正在将 Angular2 与 MVC 6 一起使用,并且我正在尝试调用 MVC 控制器上的方法以返回数据。
我的Angular服务如下:
import { Injectable } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { ICountry } from '../interfaces/country';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
@Injectable()
export class RecruiterService {
private _countriesUrl = 'Recruiter/Home/Countries';
constructor(private http: Http) { }
public getCountries = (): Observable<ICountry[]> => {
return this.http.get(this._countriesUrl)
.map((response: Response) => <ICountry[]> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
//public getCountries = (): Observable<{}> => {
// return this.http.get(this._countriesUrl)
// .map((response: Response) => <any[]>response.json())
// .do(data => console.log('All: ' + JSON.stringify(data)))
// .catch(this.handleError);
//}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
声明了我的 ICountry 接口:
export interface ICountry {
CountryId: number;
CountryName: string;
ISOCode: number;
}
我的 MVC 控制器如下:
[Area("Recruiter")]
[Route("Recruiter")]
[Authorize(ActiveAuthenticationSchemes = "Cookie")]
[EnableCors("AllowSpecificOrigin")]
public class HomeController : LogControllerBase<HomeController>
{ .......
[HttpGet("/Home/Countries")]
public IActionResult GetCountries()
{
try
{
//return new JsonResult(new object[] { 1, "England", 3 });
return Ok(_recruiterService.GetAllCountries());
}
catch (Exception ex)
{
Logger.LogError($"Error occured in Recruiter Home/GetCountries: {ex}");
return BadRequest("Obtaining Countries");
}
}......
在我的 Angular 服务中调用 countriesUrl 时,我总是收到以下错误,当我换成 angular 和 mvc 方法中的注释代码时,我也会收到同样的错误。我从来没有在 MVC 控制器方法中达到我的断点。我还尝试将 _countriesURL 设置为完全合格,例如启动http,但我仍然收到同样的错误
SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at Response.Body.json (http.umd.js:777)
at MapSubscriber.http.get.map [as project] (recruiter.service.ts:20)
at MapSubscriber._next (map.ts:75)
at MapSubscriber.Subscriber.next (Subscriber.ts:95)
at XMLHttpRequest.onLoad (http.umd.js:1180)
at ZoneDelegate.invokeTask (zone.js:398)
at Object.onInvokeTask (core.umd.js:3971)
at ZoneDelegate.invokeTask (zone.js:397)
at Zone.runTask (zone.js:165)
at XMLHttpRequest.ZoneTask.invoke (zone.js:460)
在浏览器 (Chrome) 中,如果我转到网络选项卡,我可以看到对该方法的调用,即使它似乎没有断点。在我得到的通话标题中:
Request URL:http://localhost:42413/Recruiter/Home/Countries
Request Method:GET
Status Code:200 OK
Remote Address:[::1]:42413
Referrer Policy:no-referrer-when-downgrade
【问题讨论】:
-
打开浏览器开发工具(F12),查看服务器返回了什么
-
@aspark 上面显示的错误是浏览器(chrome)给出的错误。从角度线
console.error(error); -
这个错误表示返回的内容不是angular解析的(是无效的json字符串),所以我们需要检查服务器返回,可能是404,或者500服务器错误...跨度>
-
@aspark 嗯,很奇怪。我将根据我在 chrome 中网络选项卡上的呼叫标题中看到的内容更新问题
-
但是您没有显示响应正文,或者您可以确认响应是有效的json,我猜响应是需要授权的html
标签: c# asp.net-mvc angular asp.net-web-api