C# ASP.net项目中的Servlet(在tomcat中扩展HttpServlet的Java类)的等价物是什么?
我在Apache Tomcat项目开始时就开始编写自己的web应用程序,因此,当我编写一个Servlet,用一小段JSON响应某个GET或POST时,我的代码看起来与此类似: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
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:)