MVCアプリケーションからWeb APIと呼び出しメソッドを作成しました。 Web APIで認証を実装しました。返信ステータスコード汎用タイプのメソッドから無許可
私は私のサービスメソッドを呼び出し、そこからジェネリック型のメソッドを作成し、以下のようなアクションメソッドに結果を返すいます
public async Task <T> GetWSObject <T> (string uriActionString)
{
T returnValue = default (T);
try
{
using(var client = new HttpClient())
{
//client.BaseAddress = new Uri("http://localhost:50524/");
//client.DefaultRequestHeaders.Accept.Clear();
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// HttpClient cons = new HttpClient();
client.BaseAddress = new Uri("http://localhost:50524/"); // Web Service URL
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var data = Encoding.ASCII.GetBytes("Ankita:ankita12");
var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(data));
client.DefaultRequestHeaders.Authorization = header;
HttpResponseMessage response = await client.GetAsync(uriActionString);
response.EnsureSuccessStatusCode();
returnValue = JsonConvert.DeserializeObject <T> (((HttpResponseMessage) response).Content.ReadAsStringAsync().Result);
}
return returnValue;
}
catch (Exception e)
{
throw (e);
}
}
また、私は次のように私のアクションメソッドからこのメソッドを呼び出しています:
public async Task<ActionResult> ViewAuthor(Author author)
{
ViewBag.Message = "Your Author page.";
Author authors = new Author();
string urlAction = String.Format("api/Authors/GetAuthor/{0}", author.Id);
authors = await GetWSObject<Author>(urlAction);
return View(authors);
}
GetWSObjectメソッドがジェネリック型を持つため、不正アクセスの場合にcatchブロックからどのようにメッセージを返すことができますか?
このアクションを実行する権限がないのと同じように、作成者の詳細ページにメッセージを表示したいだけです。どうしたらいいですか?
賛成ですが、ちょっと注意してください。クラスそのものは汎用的でなければなりません:public class WSResult {public T Result {get; set;}パブリックHttpStatusCode StatusCode {get; setter;}} –
何らかの理由で私はフォーマッタを処理できず、タグとして扱います。私はそれを修正するために別のブラウザでログインします。 – Stilgar
返す必要があることを正確に説明していただけますか? T型に変換できないメッセージが表示されているので – Ankita