我正在尝试使用asp web api来使用angular填充html表。如果我在firefox中调试一切都很好(我假设因为我的web服务是在json中返回的)但是在ie和chrome中它没有加载(web服务在这些浏览器中返回xml)。在webapiconfig中,我试图通过添加来使服务返回json。
Dim appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(Function(t) t.MediaType = "application/xml") config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType)
当我在所有浏览器中导航到api它返回json时,这似乎有效。但是$ http get现在仍在使用chrome和ie。
即我得到以下错误
Unhandled exception at line 21, column 406 in http://localhost:53175/Scripts/angular.min.js 0x800a139e - JavaScript runtime error: [$injector:nomod] http://errors.angularjs.org/1.3.13/$injector/nomod?p0=api%2Fproducts
这是我的获取
angular.module("api/products").constant("dataUrl", "sportstore.json").controller("sportsStoreCtrl", function ($scope, $resource, dataUrl) { $scope.data = {}; var resultPromise = $resource(dataUrl); resultPromise.success(function (data) { $scope.data.products = data; }) });
有什么想法吗?
其他信息
这是我的api控制器
<pre>
Imports System.Net
Imports System.Web.Http
Imports apitoform.productRepository
Namespace Controllers
Public Class productController
Inherits ApiController
Private repo As productRepository = productRepository.Current
Public Function GetAllProducts() As IEnumerable(Of product)
Return repo.GetAll()
End Function
End Class
End Namespace
</pre>
这里是正在返回的j_son(如果它看起来很熟悉,我正在通过专业的Angular书)
答案 0 :(得分:1)
很抱歉这是c#代码,但它应该说明仅从web api返回Json的基本思路。它来自我的一个项目的实际代码。
[Route("api/users/getbyemail/")]
public HttpResponseMessage GetByEmail(string email)
{
try
{
var result = _userService.GetByEmail(email);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
response.Content = new ObjectContent(typeof(IEnumerable<UserViewModel>), result ?? new List<UserViewModel>(), new JsonMediaTypeFormatter());
response.Headers.Add("Access-Control-Allow-Origin", "*");
return response;
}
catch (Exception ex)
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
response.Headers.Add("Access-Control-Allow-Origin", "*");
return response;
}
}
所以你要用Json内容返回HttpResponseMessage。
在我只需要从其中一个MVC控制器返回数据的情况下,我也做了类似的事情,这更容易:
public ActionResult Get(string guid)
{
var profileVm = _profileService.Get(guid);
if (profileVm != null)
{
return Json(profileVm, JsonRequestBehavior.AllowGet);
}
return new HttpNotFoundResult();
}
答案 1 :(得分:0)
带有1个参数的angular.module返回具有该名称的模块 - 您需要使用依赖模块列表定义模块(如果没有则为空数组),如下所示:
angular.module("api/products", [])...
引用的错误提供了有关问题详情的错误(角度非常好的错误消息):https://docs.angularjs.org/error/$injector/nomod?p0=api%2Fproducts