2017-12-04 16 views
0

ASP.NET webforms 프로젝트에서 애트리뷰트 (.NET 4.5)를 통해 메소드를 호출하는 웹 api2 컨트롤러를 추가하려고합니다. 작동하지 않기 때문에 라우팅을 잘못해야합니다.GET 방법이 두 개 이상입니까?

내가이 예에서 일하고 있어요 :

https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

을이 작동 다음 WebApiConfig.cs에서

:

public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     // this enables attribute routes 
     config.MapHttpAttributeRoutes(); 

     // this uses convention-based routes ("Get" as a default) 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

을 ClinicianController.cs에서 :

Clinician[] clinicians = new Clinician[] 
    { 
     new Clinician { Id = "1-552", Text = "EVERY MD,JOYCE" }, 
     new Clinician { Id = "1-598", Text = "BODY MD,THOMAS" }, 
     new Clinician { Id = "1-642", Text = "WANG MD,STANLEY R" }, 
     new Clinician { Id = "1-893", Text = "CHUNG MD,JANAHN C" }, 
     new Clinician { Id = "1-914", Text = "TO MD,J R" }, 
     new Clinician { Id = "1-921", Text = "NIGHT MD,BARRY J" } 
    }; 
    public IEnumerable<Clinician> GetAllClinicians() 
    { 
     return clinicians; 
    } 

    public IHttpActionResult Get(string id) 
    { 
     var clinician = clinicians.FirstOrDefault((p) => p.Id == id); 
     if (clinician == null) 
     { 
      return NotFound(); 
     } 
     return Ok(clinician); 
    } 

    //NOPE 
    [Route("clinician/{name}/GetByName")] 
    //NOPE 
    [HttpGet] 
    public IHttpActionResult GetByName(string name) 
    { 
     var clinician = clinicians.FirstOrDefault((p) => p.Text == name); 
     if (clinician == null) 
     { 
      return NotFound(); 
     } 
     return Ok(clinician); 
    } 

그리고 자바 스크립트 : 위치 0 과에서 JSON에 예기치 않은 토큰 < :
구문 에러 : 나는 ID = "밤"에

$.getJSON(uri + '/' + id + '/GetByName') 

전화

$(document).ready(function() { 
    // Send an AJAX request 
    $.getJSON(uri) 
     .done(function (data) { 
     // On success, 'data' contains a list of products. 
     $.each(data, function (key, item) { 
      // Add a list item for the product. 
      $('<li>', { text: formatItem(item) }).appendTo($('#clinicians')); 
     }); 
     }); 
}); 

function formatItem(item) { 
    return item.Id + ' : ' + item.Text; 
} 

function find() {   
    var id = $('#mgpId').val(); 
    // NOPE var jqxhr = $.getJSON(uri + '/' + id + '/GetByName') 
    var jqxhr = $.getJSON(uri + '/' + id) 
     .done(function (data) { 
      $('#clinician').text(formatItem(data)); 
     }) 
     .fail(function (jqXHR, textStatus, err) { 
      $('#clinician').text('Error: ' + err); 
     }); 
} 

,이 오류를 반환 codebehind는 GetByName 메서드를 절대 입력하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

업데이트 : 나는 그것이 ClinicianController에서 가져 오기 방법 안타 예상대로 임상의 객체를 반환 해서 getJSON ('API/임상/1-921')을 호출하는 경우, VS2015에서 디버깅 할 때. GetByName 메서드를 사용하여 얻을 수 없으므로 라우팅이 잘못되었습니다.

+1

이 일어나고 몇 가지 예외가 아마와 그것의 반환 HTML 또는 상 RouteParameter.Optionalname를 추가 할 필요가 시도 XML 대신 JSON. 브라우저에서 F12 키를 누르고 네트워크 트래픽을 살펴보십시오. 그것은 당신에게 응답을 보여 주어야합니다. –

답변

0

대신

[Route("clinician/{name}/GetByName")] 
[HttpGet] 

[HttpGet("GetByName/{name}")] 

은 어쩌면 당신은 config로 잘