9

在使用 AttributeRouting 而不是 WebAPI 使用的默认 RouteConfiguration 时如何设置默认控制器。即去掉注释代码部分,因为这在使用 AttribteRouting 时是多余的

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

       }
     }

如果我评论上面的部分并尝试运行 webapi 应用程序,我会收到以下错误,因为没有定义默认的 Home 控制器/操作。 HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出此目录的内容。

如何通过 Home 控制器/动作的属性路由指定路由?

编辑:代码示例:

 public class HomeController : Controller
{
    [GET("")]
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Help()
    {
        var explorer = GlobalConfiguration.Configuration.Services.GetApiExplorer();
        return View(new ApiModel(explorer));
    }
}
4

5 回答 5

7

您是否尝试过以下方法:

//[RoutePrefix("")]
public class HomeController : Controller
{
    [GET("")]
    public ActionResult Index()
    {
        return View();
    }
}

这将在集合中添加一个路由,其 url 模板为“”,控制器和操作的默认值分别为“Home”和“Index”。

于 2013-04-28T22:23:14.160 回答
5

这对我有用。Register()WebApiConfig课堂上添加这个

config.Routes.MapHttpRoute(
                name: "AppLaunch",
                routeTemplate: "",
                defaults: new
                {
                    controller = "Home",
                    action = "Get"
                }
           );
于 2015-02-04T22:05:21.863 回答
1

您需要在已安装的 AttributeRouting (ASP.NET Web API)旁边安装AttributeRouting (ASP.NET MVC)

MVC 和 Web API 包是免费包。两者都依赖于 AttributeRouting.Core.* 包。MVC 的 AR 用于控制器方法上的路由;Web API 的 AR 用于 ApiController 方法上的路由。

于 2013-06-18T16:09:58.750 回答
1

如果您从 Create New Asp.net Web 应用程序模板中检查 MVC 和 Webapi,则标准 MVC 应用程序可以同时支持 MVC 和 Webapi。

您需要在 RouteConfig.cs 下执行以下操作,因为您的查询特定于 MVC 路由而不是 webapi 路由:

public class RouteConfig
{
   public static void RegisterRoutes(RouteCollection routes)
   {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });

   }
 }

注意带有“routes.MapMvcAttributeRoutes();”的行 它提供属性路由,而对“routes.MapRoute(...)”的调用应该为您提供到默认控制器和操作的常规路由。

这是因为属性路由和常规路由可以混合使用。希望有帮助。

于 2017-08-20T20:54:45.863 回答
1

通过放置以下代码,在位于 App_Start 文件夹中的 WebApiConfig 类中启用属性路由:

using System.Web.Http;

namespace MarwakoService
{
      public static class WebApiConfig
      {
            public static void Register(HttpConfiguration config)
            {
                // Web API routes
                config.MapHttpAttributeRoutes();

               // Other Web API configuration not shown.
            }
       }
 }

您可以与基于约定的属性结合使用:

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

现在转到 global.asax 类并添加以下代码行:

GlobalConfiguration.Configure(WebApiConfig.Register);

你的 HomeController 是一个 MVC 控制器。尝试创建一个 API 控制器(假设是 CustomersController)并添加您的路由属性,如下所示:

[RoutePrefix("api/Product")]
public class CustomersController : ApiController
{
    [Route("{customerName}/{customerID:int}/GetCreditCustomer")]
    public IEnumerable<uspSelectCreditCustomer> GetCreditCustomer(string customerName, int customerID)
    {
        ...
    }

希望能帮助到你

于 2016-11-10T14:13:16.280 回答