0

按照这个问题的步骤如何将 Web API 添加到现有的 ASP.NET MVC 4 Web 应用程序项目?,我在我的应用程序中添加了 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;
        }
    }

当用户导航到列表视图时,我正在调用

 $.getJSON("/franchise/GetAllFranchises")
                .done(function (data) {

                });

转到GetAllFranchisesaction 方法并返回 json 数据。到目前为止,一切都很好。

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

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

我正在尝试像这样使用它的操作方法:

$.getJSON("api/franchise")
                .done(function (data) {

                });

我收到 404 错误,应用程序正在尝试访问以下网址:

/Franchise/api/franchise

而不是api/franchise.

全球阿萨克斯:

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

在我的 Controllers 文件夹中,我有我的 web mvc 控制器:

Controller\FranchiseController

我创建了一个新文件夹 WebAPI 来保存我的 Web api 控制器

Controller\WebAPI\FranchiseController

我究竟做错了什么 ?谢谢!

4

1 回答 1

0

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

于 2014-03-14T15:03:30.593 回答