【问题标题】:Creating a WebService inside my MVC project在我的 MVC 项目中创建 WebService
【发布时间】:2014-03-13 16:33:59
【问题描述】:

我知道还有另一个关于 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 文件吗?我相信不会。我希望你能帮助我!

【问题讨论】:

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


    【解决方案1】:

    你也有WebApiConfig.cs吗?在一个“从一开始就是 Web API”的项目中,我有这个:

    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 定义的路由将在名为 api 的控制器上查找名为 Rest 的操作,该控制器不存在。

    【讨论】:

    • @LuisGouveia:看起来它是在程序集System.Web.Http.WebHost 中定义的,如果您没有对它的引用,则需要添加一个。最初使用的项目模板可能没有引用 WebAPI 当前认为理所当然的某些程序集,因此在识别和添加它们时可能会出现一些反复试验。
    • 我删除了我的问题,因为我自己想通了。我非常感谢你,但即使使用新的 WebApiConfig 和更新的 global.asax,当我尝试 /api/rest 时,我仍然会收到 404...
    • @LuisGouveia:很有趣。我想知道是否正在以其他方式修改路由表,或者 WebAPI 项目是否在此代码之外执行了其他操作。可能值得从一开始就在模板中使用 WebAPI 从头开始​​创建一个新项目,看看您是否可以复制该问题。这可能不是它,但我看到的另一件事是你的方法被称为GetLocations,而我认为 WebAPI 只是期望Get。 (如果就这么简单,那就太棒了。)
    猜你喜欢
    • 2022-01-13
    • 2012-11-26
    • 2015-11-12
    • 1970-01-01
    • 2011-01-09
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多