C# ASP.net项目中的Servlet(在tomcat中扩展HttpServlet的Java类)的等价物是什么?

C# ASP.net项目中的Servlet(在tomcat中扩展HttpServlet的Java类)的等价物是什么?,c#,asp.net,servlets,C#,Asp.net,Servlets,我在Apache Tomcat项目开始时就开始编写自己的web应用程序,因此,当我编写一个Servlet,用一小段JSON响应某个GET或POST时,我的代码看起来与此类似: package com.stackoverflow.question; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.*; import org.json.*; public cl

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

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的等效方法/设计/新项目是什么?”

我一直在以Web表单的形式编写这些表单,如下所示:

首先是(基本为空)
.aspx
文件:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SimpleServlet_json.aspx.cs" Inherits="com.stackoverflow.question.SimpleServlet_json" %>
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表示。例如,URL
example.com/product/1
是HTML版本(带有与URL相关联的JSP或ASPx页面),而
example.com/product/1.json
是json表示(带有其中一个类)。我是URL重写的爱好者。

我不能说我可以在Servlet和asp.net上的某些类型之间进行比较,因为webforms是完全不同的


从您的示例代码中,我可以建议您查看asp.net webapi,因为这将很好地映射到您当前尝试执行的操作。

HTTPHandler应该在2003年之后的任何.net版本中执行此操作。看这个

然而,更现代(更主动)的方法是使用.NET MVC或更具体地说.NET Web API

引用他的asp.net博客:

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

各国:

ASP.NET Web API是一个使构建HTTP变得容易的框架 服务覆盖范围广泛的客户端,包括浏览器和 移动设备。ASP.NET Web API是构建Web应用程序的理想平台 NET框架上的RESTful应用程序


我认为您正在寻找一个
通用处理程序
(.ashx)


使用制度;
使用System.Web;
公共类MyHandler:IHttpHandler
{
公共无效处理请求(HttpContext ctx)
{
var json=新的JSONResonse()
{
Success=ctx.Request.QueryString[“name”!=null,
Name=ctx.Request.QueryString[“Name”]
};
ctx.Response.ContentType=“应用程序/json”;
Write(JsonConvert.SerialzeObject(json));
}
公共布尔可重用{
获取{return false;}
}
}

向他们发出与页面相同的请求。yoursite.com/my handler.ashx?name=foo

我有一个类似的问题,关于这个问题的一些研究最终以Web API结束。想和你分享

在MSDN站点中,

找到一个视频教程,他们说对于iPhone或JSON或xml的web应用程序客户端等机器消费,建议选择web API。这是视频的最后一部分

而对于更复杂的机器对机器通信,WCF是首选

这是他们演示文稿的截图

更像Owin


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

请放心,告诉我我真正想问的是“我怎么能继续用C#编写设计糟糕的Java?”Asp.NET/MVC远比WebForms更适合做您正试图做的事情。它将为每个“servlet”提供一个方法端点(在MVC中,它们将被称为操作),并允许您通过编程指定它应该返回什么样的响应(文本、HTML、JSON等)我已经看过了,一旦我能让我的公司放弃VS2008并切换到VS2012,我打算将我的很多代码切换到那个版本。Tomcat项目中的servlet以及这些东西,我一直在ASP.net代码中调用servlet,它们分别与JSP和ASPx页面共享相同的空间。我的示例相当做作,实际上它们被用作数据库实体的JSON表示(因此
example.com/product/1
是HTML版本,而
example.com/product/1.JSON
是JSON表示)啊,我想看看你从哪里得到了。HttpHandler应该这样做。请参见:从您链接到的页面:“ASP.NET页面将不包含.aspx文件中的任何代码,并且将与您的servlet类具有相同的名称。”了解到我自己已经完成了Microsoft工具自动完成的工作,这让我感到欣慰(我想知道这是什么原因)我想这会让你感到惊讶:)这个链接对你有帮助吗,还是我误解了你的问题(两次)?否则我会相应地更新我的答案。在我们找到解决方案之前不要放弃:)或“Microsoft工具”:P如果您将此评论推广到您的答案中,可能会使用类似的方式,Microsoft建议您这样做,但MVC是一种更好的方法,这是一种有趣的方法。我感觉微软在VS2008之后就赶上了这种开发风格。在每毫秒都很重要的情况下(比如自动完成),我仍然使用这些低级处理程序,因为我对WCF的愤世嫉俗看法是,除了.net语言之外,它使所有语言的客户端都变得非常复杂。在纯.net堆栈中,我可以看到它的优点,但这并不是我花很多时间投资的一项技能。无论浏览器(或服务器)或C#或Python中的JavaScript使用我的服务,我都希望我的服务简洁明了。基本上不是我喜欢的,但是不是每个人都处于相同的位置,这是一个很好的信息,因此+1:)