使用jQuery.getJson获取Web API
我是ASP.NET Web API的初学者。
无法使用jQuery.getJson()
来获取ASP.NET Web API
这失败了:
//in "file:///C:/Users/lil/Desktop/index.html" var url = "http://localhost:56110/api/Values"; $.getJSON(url, function (data) { $("#locMsg").text("success"+data); });`
这成功了:
//in "http://localhost:56110/index.html" var url = "http://localhost:56110/api/Values"; $.getJSON(url, function (data) { $("#locMsg").text("success"+data); });
我虽然是因为跨域请求,但这成功了:
//in "file:///C:/Users/lil/Desktop/index.html" var url = "http://api.flickr.com/services/feeds/photos_public.gne?tags=dog&tagmode=any&format=json&jsoncallback=?"; $.getJSON(url, function (data) { $("#locMsg").text("success"); });
然后我试着添加“jsoncallback =?” 但也失败了:
//in "file:///C:/Users/lil/Desktop/index.html" var url = "http://localhost:56110/api/Values?jsoncallback=?"; $.getJSON(url, function (data) { $("#locMsg").text("success"+data); });
ValuesController:
namespace WebApplication1.Controllers{ public class ValuesController : ApiController { // GET api/values public IEnumerable Get() { return new string[] { "value1", "value2" }; }` `// GET api/values/5 public string Get(int id) { return "value"; } // POST api/values public void Post([FromBody]string value) { } // PUT api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 public void Delete(int id) { } }
}}
您需要在WebAPI中启用CORS。 首先,安装此Nuget – https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Cors ,然后将此行添加到WebApiConfig:
config.EnableCors(new EnableCorsAttribute("*","*","*"));
WebApiConfig:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.EnableCors(new EnableCorsAttribute("*","*","*")); // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }