10

我在 Apache Tomcat 项目开始时就开始编写自己的 Web 应用程序,因此当我编写一个用一小段 JSON 响应某些 GET 或 POST 的 Servlet 时,我的代码看起来与此类似:

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。

引用Scott Gu在他的 asp.net 博客上的博客:

“我们新的 ASP.NET Web API 支持使您能够轻松创建功能强大的 Web API,可以从广泛的客户端访问(从使用 JavaScript 的浏览器到任何移动/客户端平台上的本机应用程序)。它提供以下支持:"

官方的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 回答
2

我有一个类似的问题,对它的一些研究以 Web API 结束。想和SO分享。

在 MSDN 站点中, http: //msdn.microsoft.com/en-us/library/jj823172 (v=vs.110).aspx

找到一个视频教程,他们说对于 iPhone 或 JSON 或 xml 的 Web 应用程序客户端等机器消耗,推荐使用 Web API。它在视频的最后一部分。

而对于更复杂的机器对机器通信,WCF 是可取的。

http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-04-Building-a-Service-带有 ASPNET-Web-API 的层

这是他们演示文稿的屏幕截图。

在此处输入图像描述

于 2014-11-20T08:51:15.800 回答
1

我真的不能说我可以在 Servlet 和 asp.net 上的某些类型之间画出相似之处,因为 webforms 是完全不同的。

从您的示例代码中,我可以建议您查看 asp.net webapi,因为这将很好地映射到您当前正在尝试做的事情。

于 2013-03-02T00:53:19.607 回答
1

更像欧文

“OWIN 定义了 .NET Web 服务器和 Web 应用程序之间的标准接口。”

于 2017-10-20T03:19:56.190 回答