0

現在、約 50 ビューの MVC 3 Web アプリケーションを使用しています。

ビューの横にある種の API を提供して、すべてが正常に動作するようにすることは何とか可能ですか?

私のちょっと完璧な世界のアイデア:

サーバーが実行されており、すべてのリクエストがそのビューに到達します。ユーザーは、たとえば JSON で生データを取得するかどうかを get 要求で決定できます。生データに加えて、ビューモデルの構造/名前も解析されるため、Modelbinder は自分の仕事を行うことができます。

または、別の方法として、何らかの方法でビューを非アクティブ化して、API のみを使用できるようにすることもできます (ここでも生データと構造を使用します)。

これは可能ですか(モデルバインダーはちょっと大きな懸念事項です)、おそらく多くの労力/トラブルがなくても可能ですか?

4

2 に答える 2

3

WebAPI ですべてをやり直したくない場合は、いくつかの ActionFilterAttribute を実装して、いくつかのクエリ文字列 fi に基づいて ActionResult を変更できます。

public class ResultSwitcherAttribute: ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request["data"] != null && filterContext.HttpContext.Request["data"] == "json")
        {
            filterContext.Result = new JsonResult
                {
                    Data = (filterContext.Result as ViewResult).Model,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
        }
    }
}

次に、それを application_start またはコントローラー/アクションごとに次のように登録します。

[ResultSwitcherAttribute]
public class HomeController : Controller
{
    public ActionResult Index()
    {

        return View(new TestModel()
            {
                Web = "http://www.mywebpage.com", Name = "Yngve"
            });
    }
}

?data=json を使用して URL にアクセスすると、ビューではなくモデルの JSON 表現が取得されます。

EDIT:コードサンプルが更新されました

于 2012-08-27T10:32:06.887 に答える
0

ASP.NET Web APIをアプリに追加することを検討してください。実装は非常に簡単で、REST アクションに対応するメソッドを備えたAPI コントローラーを追加するだけです。これを MVC 3 アプリに追加する方法はわかりませんが、このスタックオーバーフローの質問に MVC 4 インターネット アプリケーションのレシピがあります。したがって、プロジェクトを Web API に対応するように (おそらく MVC 4 に) アップグレードしても問題ない場合は、それが良い代替手段になると思います。

ASP.NET Web API を学習するには、このチュートリアルを開始するのに適しています。

于 2012-08-27T10:25:55.940 に答える