如何设置使用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服务器配置为不列出此目录的内容。
如何通过归属控制器/操作的属性路由指定路由?
编辑:代码示例:
public class HomeController : Controller
{
[GET("")]
public ActionResult Index()
{
return View();
}
public ActionResult Help()
{
var explorer = GlobalConfiguration.Configuration.Services.GetApiExplorer();
return View(new ApiModel(explorer));
}
}
答案 0 :(得分:5)
您是否尝试过以下操作:
//[RoutePrefix("")]
public class HomeController : Controller
{
[GET("")]
public ActionResult Index()
{
return View();
}
}
这将在集合中添加一个路径,其中url模板为“”,控制器和操作的默认值分别为“Home”和“Index”。
答案 1 :(得分:2)
这对我有用。将其添加到Register()
类
WebApiConfig
config.Routes.MapHttpRoute(
name: "AppLaunch",
routeTemplate: "",
defaults: new
{
controller = "Home",
action = "Get"
}
);
答案 2 :(得分:1)
您需要在已经安装的AttributeRouting (ASP.NET MVC)旁安装AttributeRouting (ASP.NET Web API)。
MVC和Web API包是免费软件包。两者都依赖于AttributeRouting.Core。*包。用于MVC的AR用于Controller方法的路由;用于Web API的AR用于ApiController方法上的路由。
答案 3 :(得分: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)
{
...
}
希望有所帮助
答案 4 :(得分:0)
如果从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 });
}
}
注意&#34; routes.MapMvcAttributeRoutes();&#34;它提供属性路由,同时调用&#34; routes.MapRoute(...)&#34;应该为您提供默认控制器和操作的传统路线。
这是因为属性路由和传统路由可以混合使用。 希望有所帮助。