我正在使用基于OWIN的命令行Self-Host应用程序,新属性路由对我的Web API控制器非常有用。但是,它们似乎不适用于我的常规MVC控制器。
我已尝试在start方法中使用路径模板映射旧路径,我也尝试使用属性路由。无论哪种方式,当我尝试击中这些路线时,我得到404.
在我的开始代码中,我调用了Owin.WebApiAppBuilderExtensions类中定义的IAppBuilder.UseWebApi(...)扩展方法,但是我没有看到MVC的等价物,比如UseMvc(...)。他们可以共存吗?我错过了一些明显的东西吗?
这是我的开始代码:
var config = new HttpConfiguration();
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(Startup.OAuthOptions.AuthenticationType));
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.MapHttpAttributeRoutes();
app.UseCookieAuthentication(CookieOptions);
app.UseExternalSignInCookie(CookieAuthenticationDefaults.ExternalAuthenticationType);
app.UseOAuthBearerTokens(OAuthOptions, ExternalOAuthAuthenticationType);
app.UseFacebookAuthentication(appId: "12345", appSecret: "abcdef");
app.UseWebApi(config);
这是我原来的MVC课程:
[RoutePrefix("Home")]
public class HomeController : Controller
{
[HttpGet("Index")]
public ActionResult Index()
{
return Content("Hello world!", "text/plain");
}
}
当我在我的应用上点击/Home/Index
时,我会得到404。
答案 0 :(得分:4)
目前,ASP.NET MVC不能在OWIN上运行。 Web API是最近构建的,并且考虑到了这种灵活性,因此它与System.Web
分离,特别是HttpContext
,它允许它在OWIN上运行。
在OWIN上运行的一些替代方案是FubuMVC,Nancy和Simple.Web
David Fowler已经完成了一些工作,并且在OWIN上运行了一个有点工作的MVC原型,但代码还没有被公开,并且没有任何关于它是否会在短期内出现的消息。
答案 1 :(得分:1)
确保为AttributeRouting安装了NuGet包“WebApp API”。