【发布时间】:2016-05-18 11:18:30
【问题描述】:
我有一个 webapi 的 url,如下所示:
http://Dynamicweb8724.nl/webapi/NavToDW/?process="
在 mvc 项目中我有这些文件:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "DefaultApi",
url: "DefaultApi/{action}/{id}",
defaults: new { controller = "Guestbook", action = "Index", id = UrlParameter.Optional, PageID = 1067 }
);
}
}
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "webapi/NavToDW",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
以及 Global.asax 文件:
public class Global : System.Web.HttpApplication
{
public void Application_Start(object sender, EventArgs e)
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.RazorViewEngine());
ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.WebFormViewEngine());
// Fires when the application is started
Dynamicweb.Frontend.GlobalAsaxHandler.Application_Start(sender, e);
GlobalConfiguration.Configuration.EnsureInitialized();
}
public void Session_Start(object sender, EventArgs e)
{
// Fires when the session is started
Dynamicweb.Frontend.GlobalAsaxHandler.Session_Start(sender, e);
}
public void Application_BeginRequest(object sender, EventArgs e)
{
// Fires at the beginning of each request
//GlobalAsax.Application_BeginRequest(sender, e);
}
public void Application_AuthenticateRequest(object sender, EventArgs e)
{
// Fires upon attempting to authenticate the use
Dynamicweb.Frontend.GlobalAsaxHandler.Application_AuthenticateRequest(sender, e);
}
public void Application_Error(object sender, EventArgs e)
{
// Fires when an error occurs
Dynamicweb.Frontend.GlobalAsaxHandler.Application_Error(sender, e);
}
public void Session_End(object sender, EventArgs e)
{
// Fires when the session ends
Dynamicweb.Frontend.GlobalAsaxHandler.Session_End(sender, e);
}
public void Application_End(object sender, EventArgs e)
{
// Fires when the application ends
Dynamicweb.Frontend.GlobalAsaxHandler.Application_End(sender, e);
}
public void Application_OnPreRequestHandlerExecute(object sender, EventArgs e)
{
Dynamicweb.Frontend.GlobalAsaxHandler.Application_OnPreRequestHandlerExecute(sender, e);
}
}
所以我可以连接。但是我不能去具体的链接,像这样:
http://dynamicweb8724.nl/webapi/NavToDW/?process=
结果是这样的:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
bij System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() bij System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) bij System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)
</StackTrace>
</Error>
控制器:
public class GuestbookApiControllerController : ApiController
{
// GET: GuestbookApiController
public IEnumerable<GuestbookEntry> Get()
{
return ItemManager.Storage.GetByParentPageId<GuestbookEntry>(1067);
}
}
那么我要改变什么?
但是如果我在这个方法上放一个断点:
public void Application_Start(object sender, EventArgs e)
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.RazorViewEngine());
ViewEngines.Engines.Add(new Dynamicweb.AspNet.Views.WebFormViewEngine());
// Fires when the application is started
//GlobalConfiguration.Configuration.MapHttpAttributeRoutes();
GlobalAsaxHandler.Application_Start(sender, e);
GlobalConfiguration.Configuration.EnsureInitialized();
}
它没有击中。
【问题讨论】:
-
您的
ApiController代码在哪里? -
对不起,没有ApiController
-
不使用web api为什么还要配置呢? Web api 中的任何控制器必须 继承自 ApiController。我强烈建议您阅读有关 Web Api 的更多信息,因为您的代码存在很多问题,如果您不了解主题,则无法解决。
标签: asp.net-mvc-3 asp.net-mvc-4 asp.net-web-api routing global-asax