10

私は Apache Tomcat プロジェクトの開始時に独自の Web アプリケーションのプログラミングを開始しました。そのため、GET または POST に対して JSON の小さな断片で応答するサーブレットを作成すると、コードは次のようになります。

package com.stackoverflow.question;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.json.*;

public class SimpleServlet_json extends HttpServlet {
  private static final long serialVersionUID = 1L;

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    JSONObject json = new JSONObject();
    try {
      json.put("Success", true);
      json.put("Name", request.getParameter("name"));
    } catch (JSONException e) {}
    response.setContentType("application/json");
    response.getOutputStream().print(json.toString());
  }
}

私の質問は、「ASP.net の同等のメソッド/デザイン/新しいアイテムは何ですか?」です。

私はこれらを次のような WebForms として書いています。

最初に (基本的に空の).aspxファイル:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SimpleServlet_json.aspx.cs" Inherits="com.stackoverflow.question.SimpleServlet_json" %>

次に、この.csファイル:

namespace com.stackoverflow.question
{
  public partial class SimpleServlet_json : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      var json = new JSONResponse()
      {
        Success = Request.QueryString["name"] != null,
        Name = Request.QueryString["name"]
      };
      Response.ContentType = "application/json";
      Response.Write(JsonConvert.SerializeObject(json));
    }
  }
  [Serializable]
  class JSONResponse
  {
    public string Name { get; set; }
    public bool Success  { get; set; }
  }
}

しかし、仲間の C# プログラマーに非直感的なスタイルを採用するように求めているのではないかと密かに心配しています。

これらの例はやや不自然で、実際にはデータベース エンティティの JSON 表現として使用されます。たとえば、URLexample.com/product/1は HTML バージョン (URL に関連付けられた JSP または ASPx ページを含む) でexample.com/product/1.jsonあり、JSON 表現 (これらのクラスのいずれかを含む) です。私は URL 書き換えのファンです。

4

5 に答える 5

9

HttpHandlers は、2003 年以降のすべてのバージョンの .NET バージョンでそれを行う必要があります。このMicrosoft の記事を参照してください。

ただし、より現代的な (そしてより直感的な) アプローチは、.NET MVC またはより具体的には .NET Web API を使用することです。

asp.net ブログの Scott Gu のブログからの引用:

「当社の新しい ASP.NET Web API サポートにより、幅広いクライアント (JavaScript を使用するブラウザーから、任意のモバイル/クライアント プラットフォームのネイティブ アプリまで) からアクセスできる強力な Web API を簡単に作成できます。次のサポートを提供します。 :"

また、公式の Microsoft .NET Web API ページには次のように記載されています。

ASP.NET Web API は、ブラウザーやモバイル デバイスなど、幅広いクライアントに到達する HTTP サービスの構築を容易にするフレームワークです。ASP.NET Web API は、.NET Framework で RESTful アプリケーションを構築するための理想的なプラットフォームです。

于 2013-03-02T00:59:48.020 に答える
3

Generic Handler(.ashx)を探していると思います

<%@ WebHandler Language="C#" Class="MyHandler" %>

using System;
using System.Web;

public class MyHandler : IHttpHandler 
{
    public void ProcessRequest (HttpContext ctx) 
    {
        var json = new JSONResonse()
        {
            Success = ctx.Request.QueryString["name"] != null,
            Name = ctx.Request.QueryString["name"]
        };

        ctx.Response.ContentType = "application/json";
        ctx.Response.Write(JsonConvert.SerialzeObject(json));
    }

    public bool IsReusable {
        get { return false; }
    }
}

ページと同じように、それらにリクエストを行います。yoursite.com/my-handler.ashx?name=foo

于 2013-03-02T07:59:18.343 に答える
1

Webフォームはまったく異なるため、サーブレットとasp.net上のいくつかのタイプの間に類似点を描くことができるとは言えません。

サンプルコードから、asp.net webapiを確認することをお勧めします。これは、現在実行しようとしていることに非常によく対応しているためです。

于 2013-03-02T00:53:19.607 に答える