Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 找不到WebApi区域_C# 4.0_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

C# 4.0 找不到WebApi区域

C# 4.0 找不到WebApi区域,c#-4.0,asp.net-mvc-4,asp.net-web-api,C# 4.0,Asp.net Mvc 4,Asp.net Web Api,我有一个WebApi项目,我正在尝试向其中添加一个区域 在向webapi项目添加新区域时,与向mvc4应用程序添加新区域时,是否需要执行一些不同的操作 我有一个简单的区域注册,如 public class MobileAreaRegistration : AreaRegistration { public override string AreaName { get { return "Mobile"; }

我有一个WebApi项目,我正在尝试向其中添加一个区域

在向webapi项目添加新区域时,与向mvc4应用程序添加新区域时,是否需要执行一些不同的操作

我有一个简单的区域注册,如

 public class MobileAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Mobile";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Mobile_default",
            "Mobile/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }

        );
    }
}
像这样的控制器

  public class BusinessDetailsController : BaseController
{
    public string Index()
    {
        return "hello world";
    }
    public HttpResponseMessage Get()
    {
        var data = new List<string> {"Store 1", "Store 2", "Store 3"};
        return Request.CreateResponse(HttpStatusCode.OK, data);
    }
}
公共类BusinessDetails控制器:BaseController
{
公共字符串索引()
{
返回“你好世界”;
}
公共HttpResponseMessage Get()
{
var数据=新列表{“存储1”、“存储2”、“存储3”};
返回请求.CreateResponse(HttpStatusCode.OK,数据);
}
}

然而,我永远无法访问api。我是在做一些愚蠢的事情,还是需要对webapi执行额外的步骤?

您的代码为该区域注册了MVC路由,而不是webapi路由

为此,请使用
maphttroute
扩展方法(您需要为
System.Web.Http
添加一个using语句)

但是,ASP.NET Web API中并不真正支持OOTB区域,如果有两个同名的控制器(无论它们是否位于不同的区域),则会出现异常


要支持此方案,您需要更改控制器的选择方式。您会发现一篇文章介绍了如何做到这一点。

您的代码为该区域注册了MVC路由,而不是Web API路由

为此,请使用
maphttroute
扩展方法(您需要为
System.Web.Http
添加一个using语句)

但是,ASP.NET Web API中并不真正支持OOTB区域,如果有两个同名的控制器(无论它们是否位于不同的区域),则会出现异常

要支持此方案,您需要更改控制器的选择方式。你会发现一篇文章介绍了如何做到这一点

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.Routes.MapHttpRoute(
            name: "AdminApi",
            routeTemplate: "admin/api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }