我正在尝试设置一个将使用RESTful服务的web api。我正在遵循本指南。
Getting Started with ASP.NET Web API 2 (C#)
我也在遵循本指南来设置实体框架。
Getting Started with Entity Framework 6 Code First using MVC 5
当我在Fiddler中运行Composer
时。我获得了Home.aspx
这是我的控制器的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebServer.z_Repository;
using WebServer.z_Models;
namespace WebServer.z_Controllers
{
[Route("api/Locations")]
public class LocationsController : ApiController
{
// GET api/<controller>
static IlocationsRepository LocationsRepo;
public LocationsController(IlocationsRepository _repo)
{
if (_repo == null) { throw new ArgumentNullException("_repo"); }
LocationsRepo = _repo;
}
[HttpGet]
public IEnumerable<Location> GetAll()
{
return LocationsRepo.GetAll();
}
}
}
我在GetAll()
上放了一个断点,那个断点从未被击中。这告诉我控制器没有在某处注册。但该指南并没有说明应该在哪里注册。
我创建了一个Global.asax.cs
页面,尽管这不在指南中。但我不确定从这里去哪里。
Global.asax.cs的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
namespace WebServer
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
}
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:2)
首页正在显示,因为根据您在Fiddler中显示的网址:
GET Home.aspx/api/locations
它被告知要转到Home.aspx
您正在使用属性路由,但尚未显示任何设置。
参考:Attribute Routing in ASP.NET Web API 2
你的控制器应该是:
[RoutePrefix("api/Locations")]
public class LocationsController : ApiController
{
IlocationsRepository locationsRepo;
public LocationsController(IlocationsRepository _repo)
{
if (_repo == null) { throw new ArgumentNullException("_repo"); }
this.locationsRepo = _repo;
}
//GET api/locations
[HttpGet]
[Route(""}]
public IEnumerable<Location> GetAll()
{
return locationsRepo.GetAll();
}
}
您的WebApiConfig.cs:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
并在您的全球范围内,包括
protected void Application_Start()
{
// Pass a delegate to the Configure method.
GlobalConfiguration.Configure(WebApiConfig.Register);
}
现在,为了点击网址api,您需要致电
GET api/location
Host: localhost:59104
适用于http://localhost:59104/api/locations