2017-12-13 10 views
0

"api/ping.v1"과 같은 URL에 응답해야하는 웹 응용 프로그램을 개발해야합니다 (URL은 외부에서 지정되며 옵션을 변경할 수 없습니다). 문제가 있습니다. HttpControllerSelector 내 컨트롤러 클래스를 찾을 수 없습니다. 나는 항상 '찾을 수 없음'이라는 결과를 얻습니다. 내 컨트롤러 클래스를 올바르게 찾을 수 있도록 라우팅 구성 방법을 알고 있습니다.HttpControllerSelector가 컨트롤러 클래스를 찾지 못했습니다.

컨트롤러 클래스 :

namespace WebApplication1.Controllers 
{ 
    public class PingController : ApiController 
    { 
     [HttpPost, Route("api/ping.v1")] 
     public PingResponse HandleRequest(PingRequest request) 
     { 
      // TODO: Handle request and create Response object. 
      return new PingResponse(); 
     } 
    } 
} 

WebApiConfig.cs :

namespace WebApplication1 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web-API-Konfiguration und -Dienste 

      // Web-API-Routen 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

PingRequest.cs :

namespace WebApplication1.Models 
{ 
    public class PingRequest 
    { 
     [StringLength(20)] 
     public string UserDms { get; set; } 

     [Required, StringLength(7)] 
     public string Ipn { get; set; } 

     [Required, StringLength(8)] 
     public string DealerId { get; set; } 

     [Required, StringLength(20)] 
     public string WorkshopPartshopId { get; set; } 
    } 
} 

클래스 PingResponse 여기에 지금까지 한 일을 몇 가지 코드가있다 완전히 비어있어서 여기에이 수업을 게시하지 않습니다.

웹 응용 프로그램을 테스트에 대한 나의 HTML 페이지 :

<!DOCTYPE html> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head> 
 
    <title>Ping Test</title> 
 
</head> 
 
<body> 
 

 
<div> 
 
    <h2>Ping</h2> 
 
    <input type="button" value="Ping" onclick="ping();" /> 
 
    <p id="pingResult"/> 
 
</div> 
 

 
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script> 
 
<script> 
 
    function ping() { 
 
     $.post('api/ping.v1', {userDms: "wb", ipn: "Ipn", dealerId: "dealer", workshopPartshopId: "wshop"}) 
 
      .done(function (data) { 
 
       $('#pingResult').text(JSON.stringify(data.response)).css("color", "black"); 
 
      }) 
 
      .fail(function (jqXHR, textStatus, err) { 
 
       $('#pingResult').text('Error: ' + err); 
 
      }); 
 
    } 
 
</script> 
 
</body> 
 
</html>
나는 내가 버튼으로 브라우저에서 내 테스트 사이트를 볼 수있는 비주얼 스튜디오에서 내 웹 응용 프로그램을 시작

"핑" . 버튼 핑을 클릭하면 "오류 : 찾을 수 없음"이라는 메시지가 나타납니다.

내 라우팅 구성에 문제가있는 것을 누군가가 올바른 방향으로 가리킬 수 있기를 바랍니다.

안부 마이클

+0

문제는 귀하의 URL이 아닙니다. 그건 '.' 귀하의 API. 그것은 확장 및 정적 파일 요청과 같은 사용으로 간주됩니다. https://stackoverflow.com/questions/20998816/dot-character-in-mvc-web-api-2-for-request-such-as-api-people-staff-45287 – SharmaPattar

+0

왜 내 대답을 반복합니까? ? :) – CodeFuller

답변

0

귀하의 문제는 URL에 그 점으로 인해 발생합니다. IIS는 Url이 정적 파일을 가리키며 라우팅 논리를 실행하지 않는 것으로 간주합니다.

<modules runAllManagedModulesForAllRequests="true"> 
<!-- ... --> 
</modules> 

확인 자세한 내용은이 question : 당신이 그런 URL을 방지 할 수있는 옵션이없는 경우에, 당신은 web.configmodules 섹션에 추가 runAllManagedModulesForAllRequests 속성으로이 동작을 변경할 수 있습니다.

+0

신속하고 유용한 답변을 주셔서 대단히 감사합니다. web.config의이 항목은 내 문제를 해결합니다. –