设置WebAPI,Fiddler响应是一个html页面

时间:2016-06-25 17:41:10

标签: c# asp.net asp.net-mvc asp.net-web-api asp.net-mvc-routing

我正在尝试设置一个将使用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)
        {

        }
    }
}

这是一个显示Fiddler响应的片段 Fiddler showing Home.aspx webpage

1 个答案:

答案 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