カテゴリー別アーカイブ: ASP.NET

OWINについて #niigatapm #nds39 で発表してきました #aspnetjp

この記事はASP.NET Advent Calendar 2014 – Qiitaへの参加エントリです。

昨日は@normalianさんの「Java API for JSON Processing(JSR 353) を利用してASP.NET と疎通してみる – 割と普通なブログ」でした。

さて、皆様24時間降雪量が1mを超えた中、いかがお過ごしでしょうか。私は雪を掘って掘って掘りまくっておりました。今朝は6時を過ぎても除雪車が来ていませんでした。お陰で5時半、7時過ぎと朝から2度の雪掘りです。なお、昨日は昨日でお風呂70杯分くらいの雪をスノーダンプで除雪しました。雪はホントいやです。

そんな豪雪の新潟において先週土曜日、アツいイベントが開催されました。

NDS#39 Niigata.pm tech talk – connpass
Niigata.pm

要はPerlなイベントなのですが、そこに完全アウェイでしたが、私もOWINで一席ぶってきました。

今回デモで使ったソースコードは以下にアップしています。

内容はスライドを見ていただくとして、この発表で得た知見をつらつらと。

  • OwinのセルフホストコードはLinux上のMonoDevelopで同じソリューションをそのままビルドできる
  • Monoを使うとHeroku上にもデプロイできる
  • Azure SDKでWebサイト作ってそのままデプロイできるの便利
  • VS2013かっこいいと非.NETクラスタに好印象
  • OWIN完全にPSGI(二票)
    • C#もPerlやったんや!

そして、ASP.NET 5でOwin.dllが使われていないことからOWINの今後が気になるところですが、ASP.NET 5自体がOWIN実装しており(Microsoft.AspNet.Http名前空間等)、ASP.MVCやSignalR等もその仕組の上に乗っています。したがって、OWINで得た知見はASP.NET 5でも決して無駄にはならないでしょう。

というわけで、(強引に)まとめると

The Owin.dll is dead!? Long live the OWIN!!!

というのが今回の結論でした!

次は@_iwateさんの「ASP.NETプロジェクトからDBコンテキストを切り離してマイグレーションする。 – Qaramell Blog」です。

ASP.NET Identity入門 第6回が公開されました

CodeZineで連載中の「ASP.NET Identity入門」の第6回が公開されました。

 

ASP.NET Identity 2.0の新機能 ~メールを使ったアカウントの確認

 

前回に続いて、アカウントの確認の解説の完結編です。メールで何かしらの情報を送るのは大体同じ形なので、まずはアカウントの確認をしっかりと押さえておくとよいと思います。

ASP.NET Identity入門 第5回が公開されました

CodeZineで連載中の「ASP.NET Identity入門」の第5回が公開されました。

ASP.NET Identity 2.0の新機能 ~メール連携機能のためのメール送信処理

今回から数回にわたって、ASP.NET Identity 2.0で追加されたメール連携機能を取り扱います。初回の今回はメール連携のための下準備と、「アカウントの確認」処理の中でメールを送信するところまで紹介しています。

なお、実は今回の記事、書き上げたと思ったタイミングでASP.NET Identity 2.1とVS2013 Update3がリリースされて、サンプルを新テンプレートで作り直したりと結構苦労しましたf(^^;

ASP.NET Identity入門 2-4回が公開されています

すっかりここに書くのを忘れていましたが、CodeZineで連載中のASP.NET Identity入門の第2回から第4回までが公開されています。

連載はまだまだ続きますので、今後の記事にもご期待ください。

ASP.NET vNextのソースコードがGitHubで公開されました

Microsoftがやってくれました!!!

 

aspnet/Home https://github.com/aspnet/Home

ASP.NET vNext Home

In the next version of ASP.NET we are working with multiple teams around Microsoft to create a lean, composable .NET stack that provides a familiar and modern framework for web and cloud scenarios.

 

ソース公開を心待ちにしていた、「ASP.NET Identity」もその中には含まれていたので、時間をとって中身を見てみようと思います。

aspnet/Identity https://github.com/aspnet/Identity

ASP.NET Friendly URLsを使う #aspnetjp by @masaru_b_cl

このエントリは「One ASP.NET Advent Calendar 2013 – Adventar」の参加エントリです。

前日は@NAL_6295さんの「NAL-6295の舌先三寸 » Blog Archive » [ASP.NET MVC][C#]Controllerで複数のcheckboxの状態を個々のチェック状態のBooleanではなく、チェックされているものだけの配列を引数で受け取りたい」でした。

 

Friendly URLsって?

ASP.NET WebFormsでも、シュッとしたURLを簡単に扱うためのライブラリです。

ASP.NET Friendly URLs – Home

The ASP.NET Friendly URLs library makes it easy to enable extensionless URLs for file-based handlers (e.g. ASPX, ASHX) in ASP.NET applications.

乱暴にまとめると次のような機能を提供してくれます。

  • 拡張子なしのURL
    • ~/Customer → ~/Customer.aspxにルーティング
  • 「セグメント」を使ったパラメーター指定
    • ~/Customer/1 → ~/Customer.aspx?id=1のような扱いができる

 

導入

まずは空のWebアプリケーションプロジェクトを作成しましょう。

image

「One ASP.NET」なので、「Web Forms」にチェックを入れ、「Empty」テンプレートを選択します。

image

次にNuGetからFriendlyURLsを追加します。

NuGet Gallery | Microsoft.AspNet.FriendlyUrls 1.0.2

image

 

Friendly URLsの有効化

FriendlyURLsを有効にするには、Global.asaxのApplication.Startイベントハンドラーにて、RouteConfigクラスの拡張メソッド、「EnableFriendlyUrls()」を実行します。

そして、そのための処理はNuGetで追加されたApp_Start/RouteConfigクラスのRegisterRoutesメソッドを使います。


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;
namespace FriendlyURLsSample
{
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
}
}

view raw

RouteConfig.cs

hosted with ❤ by GitHub


using System;
using System.Web.Routing;
namespace FriendlyURLsSample
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RouteConfig.RegisterRoutes(RouteTable.Routes); // <- FriendlyURLsを有効に
}
}
}

view raw

Global.asax.cs

hosted with ❤ by GitHub

 

遷移元画面作成

遷移元画面として、Default.aspxを作成します。テキストボックスとボタンがそれぞれ一つずつある、シンプルな画面です。


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FriendlyURLsSample.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Greeting!</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Enter your name:
<asp:TextBox ID="Name" runat="server"></asp:TextBox>
<asp:Button ID="Greet" runat="server" Text="Greet" OnClick="Greet_Click" />
</div>
</form>
</body>
</html>

view raw

Default.aspx

hosted with ❤ by GitHub


using System;
using Microsoft.AspNet.FriendlyUrls;
namespace FriendlyURLsSample
{
public partial class Default : System.Web.UI.Page
{
protected void Greet_Click(object sender, EventArgs e)
{
Response.Redirect(FriendlyUrl.Href("~/Greeting", Name.Text));
}
}
}

view raw

Default.aspx.cs

hosted with ❤ by GitHub

ポイントは、FriendlyUrl.Hrefメソッドです。このメソッドの第一引数に遷移先ページのURL(拡張子なし)、第二引数以降に「セグメント」として引き渡したいパラメーターを設定します。

「セグメント」については後述します。

 

遷移先画面作成

遷移先画面として、Greeting.aspxを作成します。前の画面で入力した名前を使って、あいさつ文を表示するシンプルな画面です。


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Greeting.aspx.cs" Inherits="FriendlyURLsSample.Greeting" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Greeting!</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello! <%: Name %>
</div>
</form>
</body>
</html>

view raw

Greeting.aspx

hosted with ❤ by GitHub


using System;
using System.Linq;
using Microsoft.AspNet.FriendlyUrls;
namespace FriendlyURLsSample
{
public partial class Greeting : System.Web.UI.Page
{
public string Name { get; private set; }
protected void Page_Load(object sender, EventArgs e)
{
Name = FriendlyUrl.Segments.First();
}
}
}

この画面のポイントは、FriendlyUrl.Segmentsプロパティです。前の画面のHrefメソッドで「セグメント」に指定したパラメーターが、IList<string>型で格納されています。

今回は前の画面で入力した名前だけが欲しいので、LINQのFirstメソッドで1つだけ取得しています。

 

実行結果

では実行してみましょう。まず起動すると、名前を入力する画面が開きます。

image

名前を入力して「Greet」ボタンをクリックすると、次の画面に遷移し、入力した名前を使ってあいさつ文が表示されます。

image

image

さて、アドレスバーを見てみましょう。次のアドレスとなっています。

 

    http://localhost:3622/Greeting/TAKANO%20Sho

 

Friendly URLsの力により、”~Greeting”まででGreeting.aspx画面が表示され、その後の”/”で区切られた値がセグメントとして扱われます。FriendlyUrl.Hrefメソッドで入力した名前をセグメントに指定しているので、入力した”TAKANO Sho”がちゃんとURLエンコードされ、”TAKANO%20Sho”として設定されていることがわかります。

そして、Greeting画面では、Page_Loadイベントハンドらーにて、FriendlyUrl.Segmentsプロパティを使い、上記の”TAKANO%20Sho”というセグメントの値を、URLデコードして、”TAKANO Sho”として扱えていることが確認できます。

 

他にも……

ASP.NET 4.5で導入されたモデルバインドと組み合わせるための属性が使えたり、モバイルサイト用のページに自動でルーティングしたりといった機能があるようです。前者については、「ASP.NET スキャフォールディング」の中で使われていますので、以下の拙著記事を見てみてください。後者については良く調べていないので、前述のCodePlexのプロジェクトホームを参照してください。

ASP.NET 4.5の「Scaffolding(スキャフォールディング)」機能を試す(前編)(1/5):CodeZine

ASP.NET 4.5の「Scaffolding(スキャフォールディング)」機能を試す(後編)(1/4):CodeZine

CodeZineの記事では、もう少し詳しくFriendly URLsの動作を解説していますので、ぜひご覧ください。

 

なお、今回作成したサンプルは、GitHubにアップしてあります。

masaru-b-cl/one-asp-net-advent-calendar-2013

 

次は?

@taiga_takahariさんにバトンタッチです!