Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
在ASP.NET Web API中重写或配置URL时发生冲突的路由_Asp.net_Asp.net Mvc_Asp.net Web Api_Asp.net Web Api Routing - Fatal编程技术网

在ASP.NET Web API中重写或配置URL时发生冲突的路由

在ASP.NET Web API中重写或配置URL时发生冲突的路由,asp.net,asp.net-mvc,asp.net-web-api,asp.net-web-api-routing,Asp.net,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api Routing,我正在开发一个ASP.NETMVC应用程序。在我的项目中,我为移动设备提供RESTAPI。但我在Web API中为rest API的URL配置路由时遇到问题。我正在使用WebAPI2和MVC5。我的问题是路线有冲突。请求无法选择正确的路由,即使我已清楚地配置了它 我有一个这样的会计控制器 [RoutePrefix("v1")] public class AccountController : ApiController { public UserManager<Applicatio

我正在开发一个ASP.NETMVC应用程序。在我的项目中,我为移动设备提供RESTAPI。但我在Web API中为rest API的URL配置路由时遇到问题。我正在使用WebAPI2和MVC5。我的问题是路线有冲突。请求无法选择正确的路由,即使我已清楚地配置了它

我有一个这样的会计控制器

[RoutePrefix("v1")]
public class AccountController : ApiController
{
    public UserManager<ApplicationUser> UserManager { get; private set; }

    [HttpPost]
    public async Task<IHttpActionResult> Register(RegisterBM model)
    {

    }

    [HttpPost]
    public IHttpActionResult Login(LoginBM model)
    {

    }
}
这些是我的模型课

public class LoginBM
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string Password { get; set; }
}

public class RegisterBM
{
    [Required]
    public string Name { get; set; }
    [Required]
    [EmailAddress]
    [MaxLength(70)]
    [UniqueAccountEmail(ErrorMessage = "Email is alreay taken")]
    public string Email { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}
这是我请求时遇到的错误


我的路线配置有什么问题?我如何修复它?

您正在测试的URL
http://localhost:50489/api/account/login
与您提供的
api/v1/account/login
路径的
routeTemplate
不匹配,即URL中缺少
v1
。您的测试显然正在到达另一条路径,这导致了此异常


由于WebAPI和MVC是独立的框架,因此它们都有自己的控制器。URL对于应用程序必须是唯一的,但它们之间不共享路由值。因此,您可以在两个框架中使用相同的路由值集(控制器和操作的名称相同),前提是在它们之间使用唯一的URL。通常,这是通过在Web Api URL前面加上
/Api
(您已经这样做了)来完成的。但是,如果您在
routeTemplate
中放置了一个版本,您还必须在实际URL中使用它,否则您将无法访问控制器操作。

这是您唯一一个名为AccountController(具有注册和登录方法)的控制器吗?如果没有,您可能需要以某种方式区分它们-例如,以不同的方式命名它们(例如,为您的WebAPI控制器使用ApiController后缀),或者在不同的范围(MVC的范围和WebAPI的范围)中引入它们。我已经有一段时间没有使用web API了。但是,有两种类型的路由。基于约定的vs属性路由。我相信,在您的场景中,必须使用属性路由。尝试将
Route[“/register”]
Route[“/login”]
放在相关方法之上,它应该会起作用。我添加了[Route(“login”)和[Route(“register”)]。但未找到与请求匹配的操作@当只有寄存器方法时,Muhammadadeelzahid。它起作用了。但当我添加登录操作时,它开始给我这个错误@MattstuvyStant您正在测试的URL
http://localhost:50489/api/account/login
与您提供的
api/v1/account/login
路径的
routeTemplate
不匹配,即URL中缺少
v1
。您的测试显然正在到达另一条路径,这导致了此异常。
public class LoginBM
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string Password { get; set; }
}

public class RegisterBM
{
    [Required]
    public string Name { get; set; }
    [Required]
    [EmailAddress]
    [MaxLength(70)]
    [UniqueAccountEmail(ErrorMessage = "Email is alreay taken")]
    public string Email { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}