1

Я пытаюсь настроить веб-api, который будет использовать службы RESTful. Я следую этому руководству.Настройка WebAPI, ответ Fiddler - это html-страница

Getting Started with ASP.NET Web API 2 (C#)

Я также следуя это руководство по настройке Entity Framework.

Getting Started with Entity Framework 6 Code First using MVC 5

Когда я бегу в Скрипач на 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

ответ

2

дома показывает, потому что в соответствии с URL вы показали в Скрипач:

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); 
} 

N вли, чтобы попасть местоположения Web API вам нужно будет позвонить

GET api/location 
Host: localhost:59104 

, который работает на http://localhost:59104/api/locations

+0

Я не уверен, где получить 'GlobalConfiguration', чтобы показать в IntelliSense. Нужен ли мне оператор using в 'Global.cs' –

+1

Вы установили пакеты nuget для WebAPI? Как бы то ни было, если у вас нет 'WebApiConfig.cs', тогда вам нужно его создать. Да, вам понадобится инструкция using в Global 'System.Web.Http'. Вы действительно должны прочитать статью, связанную с ответом. – Nkosi

+0

Сделал все, что вы сказали. Определенно прогресс, но у скрипача появилась ошибка внутреннего сервера 500. Я отмечу это как ответ. –

Смежные вопросы