Microsoft.OData.Clientでフォーム認証を行う

公開日: : Blog, Microsoft , , , , , ,

構成

  • サーバー
    ** Azure API Apps
    ** ASP.NET Web API
  • クライアント
    ** UWP
    ** Microsoft.OData.Client

ODataについては以下
UWPとAzure Web AppsでOData

サーバー

  • 作成済みのODataControllerにAuthorize属性を付与
[Authorize]
public class SecureModelsController : ODataController
{
    private ODataAPISampleContext db = new ODataAPISampleContext();

    // GET: odata/SecureModels
    [EnableQuery]
    public IQueryable<SecureModel> GetSecureModels()
    {
        return db.SecureModels;
    }

    // GET: odata/SecureModels(5)
    [EnableQuery]

  • Web.configに認証方法を宣言
<system.web>
  <!-- 省略 -->
  <authentication mode="Forms" />
</system.web>
  • 認証処理用のAPIコントローラーを新規作成(Authorizeなし)

クライアント

  • 認証処理
    CookieContainerを作成して認証処理する。
    作成したCookieContainerはODataコンテナーの作成時に使う
private CookieContainer SharedCookie = null;

/// <summary>
/// 認証ボタン
/// </summary>
private async void btnAuth_Click(object sender, RoutedEventArgs e)
{
    var info = new AuthInfo { Id = "test", Pass = "test" };
    var content = new StringContent(JsonConvert.SerializeObject(info));
    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
    
    SharedCookie = new CookieContainer();
    var client = new HttpClient(new HttpClientHandler { CookieContainer = SharedCookie });
    
    var response = await client.PostAsync(ROOT_URL + "api/auth", content);
    var msg = new MessageDialog(response.StatusCode.ToString());
    await msg.ShowAsync();
    return;
}
  • ODataコンテナーの使用
/// <summary>
/// ODataのロード処理(要事前認証)
/// </summary>
private async void btnOData_Click(object sender, RoutedEventArgs e)
{
    //認証対応したコンテナの作成
    var context = new Container(new Uri(ROOT_URL + "odata"));
    context.SendingRequest2 += (sender2, e2) =>
    {
        var request = ((HttpWebRequestMessage)e2.RequestMessage).HttpWebRequest;
        request.CookieContainer = SharedCookie;
    };

    //レコード取得
    foreach (var record in await context.SecureModels.ExecuteAsync())
    {
        list.Items.Add(record.Name);
    }
}

関連記事

【iPhoneアプリ】自分のiPhoneへインストールする方法

自作のiPhoneアプリを自分のiPhone上で動作させたい場合の手順をメモ ・iOS Dev

記事を読む

シマンテックインストール時に「指定されたパスが空です。」

Windows10 64bit, Symantec Endpoint Protection はおそら

記事を読む

no image

Windows8.1 64bitにVB6.0開発環境を構築メモ

MSDNフォーラムの、この投稿はとても素晴らしいです。 windows 8 64bit

記事を読む

拡張温度に対応した Windows 10 IoT Core ボード

Windows 10 IoT Core 対応ボード その2 こっちは拡張温度対応している。 Ban

記事を読む

Flowで毎月の定期タスク設定

Flow を使い始めてみた。 Requrrenceで時間をトリガーにすることが出来るがSecond

記事を読む

Minnow Board Turbot + Windows 10 IoT Core をSSD上で動作させる

MinnowBoard は SATAが搭載されているので、SSDなどが利用できる。 通常はSDカード

記事を読む

no image

【XAML/VB.NET】XAMLファイルを帳票フォーマットとして使用する

掲題について。結論としてはFixedPageをルートとするXAMLファイルを XamlReader

記事を読む

no image

【.NET】イベントのサブスクライブとサブスクライブ解除

.NETでイベントをハンドルする方法 サブスクライブ void CustomEven

記事を読む

UWPでユニットテスト

ユニバーサルWindowsのアプリケーションプロジェクトおよびクラスライブラリプロジェクトのユニット

記事を読む

【.NET】【WPF/XAML】ローカルPDFを画面に表示する

[crayon-5ce3fa3fe7583189149369/] [vb] Public

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑