【问题标题】:Angular2 not getting to MVC WebAPI Get MethodAngular2 没有使用 MVC WebAPI 获取方法
【发布时间】: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


【解决方案1】:

我的猜测是你的 web api 在初始化 Controller 时有异常。

运行调试器并检查Exception Settings 中的所有Common Language Runtime Exceptions 以查看是否有其他异常抛出。

【讨论】:

  • 不,我不相信我会这样做。在我的控制器上,我有一个构造函数,并且我有一个初始 HttpGet 方法,它返回一个基本视图和这两个中的断点,然后返回基本视图。
猜你喜欢
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多