2017-10-03 1 views
2

하나의 컨트롤러로 ASP.Net Core 2.0을 만들었지 만 문제 없습니다. 가 그럼 난 다른 컨트롤러를 추가,이 예외가 나타납니다ASP.Net Core 2 multiple controllers

경우 InvalidOperationException :

오류 1 : 다음과 같은 오류가 속성 라우팅 정보가 발생했습니다 속성 경로를 같은 이름으로 같은이 있어야합니다 '가져 오기' 템플릿 : 액션 : 'Patrimonio.Controllers.CategoriaController.Getcc (patrimonio는)'- 템플릿 : 'API/제품 분류가/{ID}'작업 : 'Patrimonio.Controllers.PatrimonioController.Getac (patrimonio는)'- 템플릿 ' api/Patrimonio/{id} ' Microsoft.AspNetCore.Mvc.Int ernal.ControllerActionDescriptorBuilder.Build (ApplicationModel 애플리케이션)

제 컨트롤러 갖는다

// GET: api/Categoria 
[Route("api/Categoria")] 
public class CategoriaController : Controller 
... 
[HttpGet] 
public IEnumerable<string> Geta() 
{ 
    return new string[] { "value1", "value2" }; 
} 

번째 갖는다

심지어 Getac 및 Getcc
// GET: api/Patrimonio/5 
[Route("api/Patrimonio")] 
public class PatrimonioController : Controller 
... 
[HttpGet("{id}", Name = "Get")] 
public string Getac(string id) 
{ 
    return "value" + id; 
} 

, ASP.Net 핵심은 거의 동일하게 불평합니다. 이름은 ''입니다.

해결 방법?

+1

흥미와

[HttpGet("{id}", Name = "Get")] 

교체보십시오! 이것은 효과가있다. 다른 라우팅 정의 코드가 있습니까? – Shyju

+0

나는 app.UseMvc()를 시도했다; //app.UseMvcWithDefaultRoute(); 그러나 이것을 해결하는 효과가없는 것으로 보인다. – Tony

답변

8

오류 메시지가 게시 된 코드와 일치하지 않습니다. 그러나 귀하의 프로그램에 2 개의 [Http*(Name = "Get")] 주석이있는 것 같습니다. 그러나 경로 이름은 고유해야합니다.

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing#route-name

또는 더 정확하게, 동일한 경로 이름을 가진 두 가지 작업이 정확히 같은 URL 템플릿을해야하는 오류 메시지에서 나타납니다. 그 이유는 경로 이름이 주로 역방향 라우팅 (즉, 작업에 대한 URL 생성)에 사용되며, 이름이 고유하지 않은 경우 해당 이름의 모든 경로가 동일한 템플릿을 사용하지 않는 한 URL이 모호합니다.

[HttpGet("{id}")] 
+0

굉장합니다. 당신은 정확하게 진단했습니다. 나는 "Get"ASP.Net Core가 Attribute 선언 Name = "Get"에 있다고 불평하지 않는다고 생각하지 않았습니다. 나는 그 방법의 이름을 알아 냈다. – Tony