我的所有路线都在我的Web Api应用中失败了

时间:2014-12-23 01:18:36

标签: c# asp.net-web-api asp.net-web-api-routing

我创建了一个简单的Web Api应用程序,该应用程序在今晚早些时候正在运行。但是在安装Ninject并重新安装引用时遇到一些问题(在使用Nuget卸载Ninject时意外删除了一些)。

我认为这可能是由于我的Startup.cs文件:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        HttpConfiguration config = new HttpConfiguration();

        ConfigureOAuth(app);

        app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    }

    public void ConfigureOAuth(IAppBuilder app)
    {
        OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
            Provider = new SimpleAuthorizationServerProvider()
        };

        // Token Generation
        app.UseOAuthAuthorizationServer(OAuthServerOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }

    private StandardKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());
        return kernel;
    }
}

这是我的一个控制器:

[RoutePrefix("api/Books")]

public class BooksController:ApiController {     私人IBookService _bookService;

private BooksController(IBookService bookService)
{
    _bookService = bookService;
}

[Route("GetAllBooks")]
public IEnumerable<Book> GetAllBooks()
{
    return _bookService.GetAllBooks();
}

[Route("GetBook")]
public IHttpActionResult GetBook(string isbn)
{
    var book = _bookService.GetBook(isbn);

    if (book == null)
        return NotFound();

    return Ok(book);
}

然而,我对这些路线中的任何一个进行的每次通话都会返回404,例如:

http://localhost/api/Books/GetAllBooks

正如你所看到的,我正在使用Ninject和Owin,所以我不确定这是否会导致问题。

以前见过这个或有任何想法的人?

1 个答案:

答案 0 :(得分:1)

我看到你正在使用属性路由。要使其正常工作,您需要致电config.MapHttpAttributeRoutes();

HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();