2016-07-11 4 views
0

Dearlすべて WebAPI2の新機能です。 JSON形式の関数からデータを消費しますが、エラーStatusCode:403、ReasonPhrase: 'ModSecurity Action'をスローします。 私はブラウザから直接使用できますが、HttpClientからは使用できません。セキュリティは実装されていません。C#で認証なしでWebAp2を使用する方法

ローカルサーバーでは問題はありませんが、リモート共有サーバーではエラーがスローされます。 APIURL。 http://api.owncircles.com/api/Circles/Education/Questions/getAns/2012460157

API機能コード。

[HttpGet()] 
[AllowAnonymous] 
[Route("~/api/Circles/Education/Questions/getAns/{quesID}")] 
public IHttpActionResult getAns(string quesID) 
{ 
    IQuestions objQuestion = Questions.getInatance(); 
    var qtn = objQuestion.getAns(quesID); 
    return Json(qtn); 
} 

クライアント側

[AllowAnonymous] 
public async Task<ActionResult> checkAns(string id) 
{ 
    string url = common.apiURL + "Circles/Education/Questions/getAns/"+id; 
    //HttpClient client = new HttpClient(new HttpClientHandler() {UseDefaultCredentials = true }); 
    HttpClient client = new HttpClient(); 

    // client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Constants.)); 
    // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(""); 
    // client.DefaultRequestHeaders.Authorization = null; 
    client.BaseAddress = new Uri(url); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    ent_QuestionsDetails Questions = null; 
    var response = await client.GetAsync(url); 
    if (response.IsSuccessStatusCode) 
    { 
     Questions = response.Content.ReadAsAsync<ent_QuestionsDetails>().Result; 
    } 
    OC.Models.mod_Questions objModel = new OC.Models.mod_Questions(); 
    objModel.questionID = Questions.questionID; 
    objModel.questions = Questions.questions; 
    objModel.questionOptions = Questions.questionOptions; 
    return View(objModel); 
} 
+0

以下の回答があなたの質問に答えている場合は、チェックボックスを使用してそのようにマークすることを忘れないでください。 – Igor

答えて

1

これは要求が拒否され、省略されている場合、そのユーザーエージェントと思われます。ヘッダー内のクロムユーザーエージェント値を模倣すると、要求は成功します。ここでは、自己の例を働い含まれている:それはコンソールアプリケーション

using (HttpClient client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://api.owncircles.com/"); 
    client.DefaultRequestHeaders.Clear(); 
    client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); 
    client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"); 

    var result = client.GetAsync("api/Circles/Education/Questions/getAns/2012460157").Result; 

    if(result.IsSuccessStatusCode) 
     Console.Write(result.Content.ReadAsStringAsync().Result); 
    else 
     Console.Write("fail"); 
} 

で試験したように、この例では、私がチェックの種類がわからない言われていることのawait /非同期使用していないことを

注意ユーザエージェント上にリクエストを拒否するAPIサーバ側があります。

+0

非常にあなたは魔法使いであり、あなたの魔法はUserAgentコンテンツの中に隠されてくれてありがとう。すべての共通ブラウザまたは各ブラウザのこれらのUserAgent構文には、別々のコードがあります。 – Own

+0

@Own - この[resource out](https://en.wikipedia.org/wiki/User_agent)を確認してください。私はあなたにできること全てを伝えることはできません。それはエージェントに依存し、多くのものがあり、バージョンが増えるにつれて変化します。 – Igor

関連する問題