2016-06-03 3 views
0

Я работаю на сайте MVC Интранет с использованием аутентификации AD, и я получаю сообщение об ошибке, когда пользователь пытается URL-адрес этого формата ..ASP.NET MVC маршрутизации с символом плюс

.../myController/view/64+ 

Другое такие ошибки, как

.../myController/view/aString 

.../myController/view/ 

все обработаны хорошо, но сценарий '64 +»попадает в атрибут Авторизовать и User.Identity равна нулю.

Любые указания очень ценятся.

код контроллера

[Authorize(roles="dom\\group")] 
public class MyController { 

    [HttpGet] 
    public ActionResult View(int id) 
    { 
     // do stuff.. 

     return View(viewModel); 
    } 


    protected override void OnException(ExceptionContext filterContext) 
    { 
     // handle and log error 
    } 
} 

маршрутизации сайта по умолчанию

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

ответ

1

User.Identity равна нулю, если пользователь не вошел в систему. Как вы не украсит свое действие с Авторизоваться атрибут, это может произойти.

Проблема с маршрутизацией не позволит вообще ударить по действию. Поэтому я исключаю это.

+0

Атрибут [Авторизовать] находится в самой декларации контроллера. Авторизация работает отлично для всех действительных URL-адресов и других исключений - обновлено Q, чтобы показать это – SkeetJon

+0

Это совсем не касается действия, поэтому я думал, что это проблема маршрутизации. – SkeetJon

+0

Хорошо. «64+» интерпретируется как строка. Для вашего действия требуется int. Поэтому маршрут не найден. – bdongus