我创建了我要学习的第一个WebAPI项目,该项目在项目的根目录中有一个index.html页面。我将该页面设置为Startup。一切正常。但是,我想使用MVC控制器来调用View。
所以我在Controller文件夹中创建了一个名为" DefaultController"的新MVC控制器。在其中,有一种方法:
public ActionResult Index()
{
return View();
}
我创建了一个View文件夹,然后创建了一个Default文件夹,在其中创建了一个Index.cshtml文件。
当我启动项目时,它调用我的旧index.html。所以,我把启动改为index.cshtml,这是错误的 - 知道。 MVC调用控制器方法。所以,我试图解决 - 我如何在DefaultController中调用控制器方法?
我想我需要改变路线?
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional }
);
}
我的计划是使用cshtml页面(而不是html页面)来使用布局并允许控制器启动视图。每个视图都会使用api回调给我的WebApi控制器来进行数据处理。
这似乎是处理我的WebAPI / KnockoutJs项目的好方法吗?
我只需要知道如何让控制器成为默认控制器。
删除index.html页面时,出现错误:
HTTP错误403.14 - 禁止将Web服务器配置为不列出 这个目录的内容。
答案 0 :(得分:0)
我认为您需要将控制器名称添加到默认对象中,如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
}
答案 1 :(得分:0)
您需要注册WebAPI路由和MVC路由:
所有这些都应该在Application_Start
文件中的Global.asax.cs
方法中完成:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
GlobalConfiguration.Configure(WebApiConfig.Register)
用于配置WebApi(并注册与api相关的路由)():
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
RouteConfig.RegisterRoutes(RouteTable.Routes);
用于注册MVC路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
}
您还需要验证您创建的DefaultController是MVC控制器(继承自System.Web.Mvc.Controller
)而不是WebAPI控制器
答案 2 :(得分:0)
根据我的经验,当你想调用index.cshtml时,在路由配置中你必须在RouteConfig.cs中定义这样的控制器:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
控制器应该是" Home",而Action是" Index"。但是,这个maproute是默认的。如果你想再增加一个怎么样?
routes.MapRoute(
"Article",
"articles",
new { controller = "News", action = "ArticleList" }
);
您可以像上面显示的那样随意写作"文章"是maproute的名称和"文章"是网址。如果编译控制器新闻和动作文章列表,它将变成这样(http://www.domain.com/articles)。并且" .... / articles"是你替换的东西(不需要定义控制器或动作)你不需要打开www.domain.com/News/ArticleList它足以访问网址www.domain.com/articles和maproute将自动路由到控制器新闻和行动文章列表。
这只是我对maproute如何运作的观点。
CMIIW:)