2017-09-18 1 views
0

ASP.NET 웹 사이트가 있습니다. 브라우저에서 URL 'http://example.org/worktodo.ashx'을 호출하면 제대로 작동합니다.HTTP/GET 요청을 보내는 동안 C# WinApp에서 Fobidden 예외가 발생합니다.

나는 하나의 안드로이드 응용 프로그램을 만들었고, 위의 URL을 안드로이드 응용 프로그램에서 호출하면 괜찮습니다.

나는 C#에서 창 응용 프로그램을 만들었고 위의 URL을 해당 창 응용 프로그램에서 호출하면 403 오류가 발생하여 오류가 발생합니다.

다음은 C# 코드입니다.

 try 
     { 
      bool TEST_LOCAL = false; 
      // 
      // One way to call the url 
      // 
      WebClient client = new WebClient(); 
      string url = TEST_LOCAL ? "http://localhost:1805/webfolder/worktodo.ashx" : "http://example.org/worktodo.ashx"; 
      string status = client.DownloadString(url); 
      MessageBox.Show(status, "WebClient Response"); 

      // 
      // Another way to call the url 
      // 
      WebRequest request = WebRequest.Create(url); 
      request.Method = "GET"; 
      request.Headers.Add("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
      request.Headers.Add("Connection:keep-alive"); 
      request.Headers.Add("User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"); 
      request.Headers.Add("Upgrade-Insecure-Requests:1"); 
      request.Headers.Add("Accept-Encoding:gzip, deflate, sdch"); 
      request.ContentType = "text/json"; 
      WebResponse response = request.GetResponse(); 

      string responseString = new System.IO.StreamReader(response.GetResponseStream()).ReadToEnd(); 
      MessageBox.Show(responseString, "WebRequest Response"); 
     } 
     catch (WebException ex) 
     { 
      string error = ex.Status.ToString(); 

     } 

던져 예외는 다음과 같습니다

 The remote server returned an error: (403) Forbidden. 
     StatusCode value is 'Forbidden' 
     StatusDescription value is 'ModSecurity Action' 

에 이어 안드로이드 응용 프로그램 코드가 (라이브러리를 org.apache.http 사용) :

Handler handler = new Handler() { 
     Context ctx = context; // save context for use inside handleMessage() 
     @SuppressWarnings("deprecation") 
     public void handleMessage(Message message) { 
      switch (message.what) { 
       case HttpConnection.DID_START: { 
        break; 
       } 
       case HttpConnection.DID_SUCCEED: { 
        String response = (String) message.obj; 
        JSONObject jobjdata = null; 
        try { 
         JSONObject jobj = new JSONObject(response); 
         jobjdata = jobj.getJSONObject("data"); 
         String status = URLDecoder.decode(jobjdata.getString("status")); 
         Toast.makeText(ctx, status, Toast.LENGTH_LONG).show(); 
        } catch (Exception e1) { 
         Toast.makeText(ctx, "Unexpected error encountered", Toast.LENGTH_LONG).show(); 
         // e1.printStackTrace(); 
        } 
       } 
      } 
     } 
    }; 

    final ArrayList<NameValuePair> params1 = new ArrayList<NameValuePair>(); 
    if (RUN_LOCALLY) 
     new HttpConnection(handler).post(LOCAL_URL, params1); 
    else 
     new HttpConnection(handler).post(WEB_URL, params1); 
} 

노력/연구 해결하기 위해 지금까지 수행 문제 :

해결 된 해결책은 다음과 같습니다. 03 금지 그들에 대한 오류하지만 내가 파일

  • 사람을 'RWX'사용 권한을 설정, 누군가가, 파일이, 적절한 'RWX'권한 세트가 필요했다

    1. 내 문제를 해결 그렇게하지 못했습니다 "USER-AGENT를 지정했는데, 시도했습니다. 또 다른 방법은
    2. 누군가가 유효한 헤더를 고정했다)를 호출 - 설정하는 유효한 헤더를 찾을 수 피들러를 사용, 나는 크롬/개발자 도구 및 설정 유효한 헤더 (REF를 사용 다른 방법을 호출하는)
    3. 은 누군가 구성. ModSecurity로 해결할 수는 있지만 ModSecurity를 ​​설치하지 않아서 내 웹 사이트에 ModSecurity가 설치되어 있지 않습니다.
    4. 많은 사람들이 MVC에 문제가있어 해결했지만 MVC를 사용하지 않았습니다. 나를위한 것이 아닙니다
    5. ModSecurity 레퍼런스 매뉴얼에 따르면 웹 사이트에서 제거하려면 웹에 <modules><remove name="ModSecurityIIS" /></modules>을 추가하십시오. 나는했지만

    내 질문

  • 이 문제가 해결되지 수 :

    1. 안드로이드 앱이 성공 C# WinApp가 실패하는 이유로서을?
    2. 왜 Android 앱에 'ModSecurity Action'예외가 발생하지 않습니까?
    3. 왜 C# WinApp에서 'ModSecurity Action'예외가 발생합니까?
    4. C# 코드를 수정하는 방법은 무엇입니까?

    제발 도와주세요. 다들 감사 해요.

    +0

    을 필요로 당신은 https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Manually_Installing_and_Troubleshooting_Setup_of_ModSecurity_Module_on_IIS을 실행하고 있습니까? – mjwills

    +0

    내 웹 사이트에 대한 호스팅을 공유했습니다. 나는 그것을 사용하지 않았지만 공급자가 그것을 사용했는지 여부를 모른다. ModSecurity가 용의자 인 경우 android app는 잘 작동하지 않아야하지만 그 android app이 잘 작동합니다. 그래서, C# winapp에 무슨 문제가 있는지 이해할 수 없습니다. – Rupesh

    +0

    위의 링크에서 언급 한 제품을 사용하고 있는지 호스팅 제공 업체에 문의하십시오. – mjwills

    답변

    0

    답변을 찾았습니다. 아래 코드는 예상대로 작동합니다.

    bool TEST_LOCAL = false; 
        string url = TEST_LOCAL ? "http://localhost:1805/webfolder/worktodo.ashx" : "http://example.org/worktodo.ashx"; 
    
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
        request.Method = "GET"; 
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; 
        request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"; 
        request.ContentType = "text/json"; 
    
        WebResponse response = request.GetResponse(); 
        string responseString = new System.IO.StreamReader(response.GetResponseStream()).ReadToEnd(); 
        MessageBox.Show(responseString, "WebRequest Response"); 
    

    참고 : using System.Net;

    관련 문제