Asp.net mvc 4 将Web Api控制器添加到现有ASP.NET 4 Web应用程序

Asp.net mvc 4 将Web Api控制器添加到现有ASP.NET 4 Web应用程序,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,按照这个问题中的步骤,我向我的应用程序添加了web api支持 在我最初的场景中,我有以下web mvc控制器: public class FranchiseController : Controller { public ActionResult List() { return View(); } [DataContext] public ActionResult GetA

按照这个问题中的步骤,我向我的应用程序添加了web api支持

在我最初的场景中,我有以下web mvc控制器:

public class FranchiseController : Controller
    {


        public ActionResult List()
        {
            return View();
        }



        [DataContext]
        public ActionResult GetAllFranchises()
        {
            var franchiseInfoViewModelList = new List<FranchiseInfoViewModel>();

            var franchiseInfoList = _franchiseService.GetAll();

            foreach (var franchiseInfo in franchiseInfoList)
            {
                franchiseInfoViewModelList.Add(new FranchiseInfoViewModel(franchiseInfo, p => p.IsImportant));
            }

            var jsonNetResult = new JsonNetResult
            {
                Formatting = Formatting.Indented, 
                Data = franchiseInfoViewModelList
            };

            return jsonNetResult;
        }
    }
public class FranchiseController : ApiController
    {
        public IEnumerable<FranchiseInfoViewModel> GetAllFranchises()
        {
            var allFranchises = new List<FranchiseInfoViewModel>();

            var franchiseInfoList = _franchiseService.GetAll();

            foreach (var franchiseInfo in franchiseInfoList)
            {
                allFranchises.Add(new FranchiseInfoViewModel(franchiseInfo, p => p.IsImportant));
            }

            return allFranchises;
        }
    }
Controller\FranchiseController
转到
getAll特许经营
操作方法并返回json数据。到目前为止还不错

我创建了以下web api控制器:

public class FranchiseController : Controller
    {


        public ActionResult List()
        {
            return View();
        }



        [DataContext]
        public ActionResult GetAllFranchises()
        {
            var franchiseInfoViewModelList = new List<FranchiseInfoViewModel>();

            var franchiseInfoList = _franchiseService.GetAll();

            foreach (var franchiseInfo in franchiseInfoList)
            {
                franchiseInfoViewModelList.Add(new FranchiseInfoViewModel(franchiseInfo, p => p.IsImportant));
            }

            var jsonNetResult = new JsonNetResult
            {
                Formatting = Formatting.Indented, 
                Data = franchiseInfoViewModelList
            };

            return jsonNetResult;
        }
    }
public class FranchiseController : ApiController
    {
        public IEnumerable<FranchiseInfoViewModel> GetAllFranchises()
        {
            var allFranchises = new List<FranchiseInfoViewModel>();

            var franchiseInfoList = _franchiseService.GetAll();

            foreach (var franchiseInfo in franchiseInfoList)
            {
                allFranchises.Add(new FranchiseInfoViewModel(franchiseInfo, p => p.IsImportant));
            }

            return allFranchises;
        }
    }
Controller\FranchiseController
我收到404错误,应用程序正在尝试访问以下url:

/Franchise/api/franchise
而不是
api/特许经营

全球Asax:

protected void Application_Start()
        {
            Log.StartSession();
            ElmahExtension.SetCurrentApplication(this);

            ViewEngines.Engines.Add(new OmegaViewEngine());
            AreaRegistration.RegisterAllAreas();

            SerializerConfig.Register(GlobalConfiguration.Configuration);
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
            Bootstrapper.Initialise();
            FluentValidationModelValidatorProvider.Configure();

        }
默认路线:

public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
在我的控制器文件夹中,我有我的web mvc控制器:

public class FranchiseController : Controller
    {


        public ActionResult List()
        {
            return View();
        }



        [DataContext]
        public ActionResult GetAllFranchises()
        {
            var franchiseInfoViewModelList = new List<FranchiseInfoViewModel>();

            var franchiseInfoList = _franchiseService.GetAll();

            foreach (var franchiseInfo in franchiseInfoList)
            {
                franchiseInfoViewModelList.Add(new FranchiseInfoViewModel(franchiseInfo, p => p.IsImportant));
            }

            var jsonNetResult = new JsonNetResult
            {
                Formatting = Formatting.Indented, 
                Data = franchiseInfoViewModelList
            };

            return jsonNetResult;
        }
    }
public class FranchiseController : ApiController
    {
        public IEnumerable<FranchiseInfoViewModel> GetAllFranchises()
        {
            var allFranchises = new List<FranchiseInfoViewModel>();

            var franchiseInfoList = _franchiseService.GetAll();

            foreach (var franchiseInfo in franchiseInfoList)
            {
                allFranchises.Add(new FranchiseInfoViewModel(franchiseInfo, p => p.IsImportant));
            }

            return allFranchises;
        }
    }
Controller\FranchiseController
我还制作了一个新文件夹WebAPI来存放我的WebAPI控制器

Controller\WebAPI\FranchiseController

我做错了什么?谢谢

我不确定将MVC Internet应用程序控制器和MVC Web API控制器命名为“特许控制器”是否正确(完全不同)。在重命名其中一个之后,我认为应该将WebAPI控制器放在目录(Controller)的根目录中