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);
    }
}

関連記事

【WPF/XAML】セパレータを縦にする

<Window x:Class="VerticalSeparator&q

記事を読む

no image

【Cocos2d-x】Cocos2d-xセットアップ

メモ。Xcodeはインストール済、OSはMac10.9.5 必要なものをダウンロード&解凍

記事を読む

Hardware assisted virtualization and data execution protection must be enabled in the BIOS

MacBook Pro + Bootcamp + Windows10 で Docker for Wi

記事を読む

no image

UWPとAzure Web AppsでOData

超メモ。走り書き。 Azure上にSQLデータベースコードファーストなAPIをODataで作成する。

記事を読む

【Cocos2d-x】iPhone実機でプロジェクトを動かすまで

Macを購入してCocos2d-xデビューしたが、 iPhone実機で動かすまでをメモ

記事を読む

【ストアアプリ】画面遷移の基本①

こんにちは。 Windowsストアアプリをぼちぼち触り始めています。 WindowsRuntim

記事を読む

IntelliTestはどこまでカバーしてくれるのか

私はレガシーな開発環境・案件が多かったのですが、 この頃、ユニットテストを利用する機会が増えてきま

記事を読む

no image

【WPF/XAML】Buttonのテキスト(Content)を自動改行/折り返しさせる

今更WPFを触りはじめました。 それまではほぼ.NETは2.0止まりというオワコン開発者です。

記事を読む

【iPhoneアプリ】リリース手順〜審査完了後〜

前回からの続き。 中身が無いアプリだったのでリジェクトされると思いきや 審査に通ってしま

記事を読む

【ストアアプリ】トースト通知の基本

Windowsストアアプリ開発での基本。 トースト通知について投稿します。 Pack

記事を読む

Message

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

PAGE TOP ↑