2014-11-12 2 views
1

무슨 일인지 모르겠지만 라우팅에 문제가있는 것 같습니다. 여기 웹 API JSON 404가 발견되지 않음

는 JSON

$("form").submit(function() { 
      if (api.validateForm()) { 
       var pid = '1198'; 
       var image = document.getElementById("myCanvas").toDataURL("image/png"); 
       image = image.replace('data:image/png;base64,', ''); 
       $.ajax({ 
          type: 'POST', 
          async: false, 
          url: 'https://localhost:44301/webapi/SaveImage/SaveSignature', 
          data: '{ "imageData" : "' + image + '" }', 
          contentType: 'application/json; charset=utf-8', 
          dataType: 'json', 
          success: function (msg) { 
           window.location.replace("success.aspx"); 
          } 
        }); 

      } 
      return false; 
    }); 

응용 프로그램 시작 여기

RouteTable.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "webapi/{controller}/{action}", 
     defaults: new { id = System.Web.Http.RouteParameter.Optional } 
     ); 

에게 내 컨트롤러는

public class SaveImageController : ApiController 
    { 
     public class CrossDomainActionFilter : ActionFilterAttribute 
     { 
      public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
      { 
       bool needCrossDomain = true; 

       if (needCrossDomain) 
       { 
        actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
       } 

       base.OnActionExecuted(actionExecutedContext); 
      } 
     } 

     [AcceptVerbs("GET", "POST")] 
     [CrossDomainActionFilter] 
     public bool SaveSignature(string imageData) 
     { 
      string uploadPath = HttpContext.Current.Server.MapPath("Files") + "\\1198\\"; 

      if (!System.IO.Directory.Exists(uploadPath)) 
      { 
       System.IO.Directory.CreateDirectory(uploadPath); 
      } 

      string fileNameWitPath = uploadPath + DateTime.Now.ToString().Replace("/", "-").Replace(" ", "- ").Replace(":", "") + ".png"; 
      using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create)) 
      { 
       using (BinaryWriter bw = new BinaryWriter(fs)) 
       { 
        byte[] data = Convert.FromBase64String(imageData); 
        bw.Write(data); 
        bw.Close(); 
       } 
      } 

      return true; 
     } 
     [AcceptVerbs("Get")] 
     public string SayHello(string aye) 
     { 
      return "Say Hello from Test Controller"; 
     } 

    } 

방화범 오류 응답

{"Message":"No HTTP resource was found that matches the request URI 'https://localhost:44301/webapi/SaveImage/SaveSignature'.","MessageDetail":"No action was found on the controller 'SaveImage' that matches the request."} 
+0

으로 다른 사람을 도움이 될 것입니다,하지만 컨트롤러 조치는 아무 것도 반환하지 않습니다. 액션에 중단 점을 넣으면 트리거됩니까? 그렇다면 무언가를 반환하고 여전히이 문제가 있는지 확인하십시오. –

+1

SaveSignature 메서드가 포함 된 컨트롤러의 이름은 무엇입니까? – mga911

+0

@ mga911 SaveImageController – prospector

답변

0

웹 API는 이러한 유형의 요청을 처리 할 수 ​​없습니다. querystring을 사용하여 통과했고 작동 했으므로 이제 Signature 객체를 만들고 정보를 연결하고 객체를 전달하여 API로 전달합니다.

이 링크는 AJAX는 JSON의 응답을 기대하도록 구성되어이 문제

http://techbrij.com/pass-parameters-aspdotnet-webapi-jquery

+0

당신이 그것을 다행있어 .... – Jim

0

아마도 https입니다. https에서 dev 환경을 실행하고 있습니까? 귀하의 URL에 http를 사용해보십시오.

+0

비 https에서도 작동하지 않습니다. "요청 URI 'http : // localhost : 3168/webapi/SaveImage/SaveSignature'와 일치하는 HTTP 리소스가 발견되지 않았습니다. – prospector

+0

페티 첸틱 상태가되고 싶지 않지만 사용중인 url에 http : //? – Jim

+0

https가 없습니다. , SSL 인증서를 사용했습니다 – prospector

관련 문제