在我的MVC项目中创建WebService

时间:2014-03-13 16:34:00

标签: c# asp.net asp.net-mvc web-services asp.net-mvc-4

我知道有另一个关于WebapiConfig.cs和RouteConfig.cs的帖子,但我可以保证这是一个不同的问题。

当我发现我必须创建一个web服务(在同一个域中)时,我的MVC项目非常发达,我将授予对我的一个模型(包括JSON和XML)的访问权。

为了做到这一点,我右键单击控制器并选择“使用操作添加Web API 2控制器,使用实体框架”并选择我的模型类和数据库上下文。

模板非常完整,我认为我已准备好进行以下测试:

namespace MVC4GMAPS.Controllers
{
    public class RestController : ApiController
    {
        private LocationDBContext db = new LocationDBContext();

        // GET api/Rest
        public IQueryable<Location> GetLocations()
        {
            return db.Locations;
        }
etc...

不幸的是,当我尝试访问https://localhost:44300/api/Rest时,我得到了404.但是,localhost:44300/Home/Index仍然有效。

我认为问题依赖于我的RouteConfig.cs,因为它期待{action}而我的RestController没有任何动作:

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
etc...

我该怎么办?我可以同时创建WebapiConfig.cs文件吗?我不相信。我希望你能帮助我!

1 个答案:

答案 0 :(得分:4)

你还有WebApiConfig.cs吗?在一个项目中,从一开始就是#AP; Web API&#34;我有这个:

public static class WebApiConfig
{
  public static void Register(HttpConfiguration config)
  {
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
  }
}

这与其他配置一样,是从Global.asax.cs

调用的
GlobalConfiguration.Configure(WebApiConfig.Register);

那应该让路由指向API控制器。否则,正如您所说,默认情况下从MVC定义的路由将在名为Rest的控制器上查找名为api的操作,该操作不存在。