我有一個使用少量Web Api 2控制器的asp.net網站類型項目。我將它轉換爲支持所有三種技術的web.net應用程序:webforms,web api和mvc。在將asp.net網站升級到asp.net web應用程序後,Web API 2路由不工作
Web api控制器已被轉換器(通過Project - > Convert to Web Application)移動到一個名爲Old_App_Code的文件夾中。他們在App_Code/WebApi文件夾中,現在他們在Old_App_Code/WebApi中。所有與一個例外控制器是在一個命名空間中,讓我們把它name1.name2.name3:
namespace name1.name2.name3
{
[RoutePrefix("api/v1/orders")]
public class OrdersController : BaseAppController //BaseAppController is a class that inherits ApiController and adds a few common methods to all WebApi controllers ...
{
...
}
}
WebApiConfig.cs(Old_App_Code下):
namespace name1.name2.name3
{
/// <summary>
/// </summary>
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();//use attributes to map routes.
}
}
}
的global.asax.cs:
protected void Application_Start()
{
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
// Code that runs on application startup
log4net.Config.XmlConfigurator.Configure();
AreaRegistration.RegisterAllAreas();
// GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configure(name1.name2.name3.WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
RouteConfig.cs:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我的問題是Web api路由不再工作,我得到404s。
我使用了ApiHelp頁面,唯一註冊的控制器是沒有命名空間的控制器。我把它放在一個名字空間裏,希望它不會出現(獲得一些一致性:-)),但它仍然顯示出來(我重新啓動IIS Express)。
不知何故,MapHttpAttributeRoutes似乎沒有找到這些控制器來構建web api路由。
任何想法?
我使用VS 2015與System.Web.Mvc和Microsoft.AspNet.WebApi 5.2.3版本5.2.3.0。
更新:工作的控制器直接從ApiController繼承,而其他控制器繼承自不同項目中的普通類(它繼承了ApiController),並在另一個應用程序中使用。有沒有辦法告訴註冊控制器的組件也是WebApi控制器?我更新了上面的代碼片段以反映這一點。
OldAppCode和AppCode是兩個獨立的項目嗎? –
@PrashanthBenny請注意它們是App_Code和Old_App_Code。 App_Code是包含代碼的網站類型項目中的特殊文件夾,例如它包含web api控制器。當網站轉換爲Web應用程序時,App_Code被重命名爲Old_App_Code。 – costa
您沒有在Application_Start中註冊您的WebApiConfig。您已將它註釋掉 –