2013-03-02 4 views
7

Ich begann zu Beginn des Apache Tomcat-Projekts mit der Programmierung meiner eigenen Web-Anwendungen. Wenn ich also ein Servlet schreibe, das mit einem kleinen Stück JSON auf GET oder POST antwortet, sieht mein Code so ähnlich aus:Was entspricht einem Servlet (Java-Klasse, die HttpServlet in Tomcat erweitert) in einem ASP.net-Projekt?

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()); 
    } 
} 

Meine Frage ist "Was ist die äquivalente Methode/Design/New Item für ASP.net?"

Ich habe diese als WebForms geschrieben, die wie folgt aussehen:

Zuerst wird die (im Grunde leer) .aspx Datei:

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

Dann ist diese .cs Datei:

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; } 
    } 
} 

Aber Ich mache mir im Geheimen Sorgen, dass ich meine Mitschüler dazu bringe, einen nicht intuitiven Stil anzunehmen.

Diese Beispiele sind eher erfunden, in der Praxis werden sie als JSON-Darstellung einer Datenbankeinheit verwendet. Für ein Beispiel ist die URL example.com/product/1 die HTML-Version (mit einer der URL zugeordneten JSP- oder ASPx-Seite), während example.com/product/1.json die JSON-Darstellung (mit einer dieser Klassen) ist. Ich bin ein Fan von URL Rewriting.

+0

Fühlen Sie sich frei in Horror zu keuchen und sagen Sie mir, wenn was ich wirklich frage ist "Wie kann ich schreiben schlecht gestaltete Java in C# weiter" –

+1

Asp.Net/MVC ist * weit *, * weit *, besser geeignet zu tun was Sie versuchen, als WebForms zu tun. Sie erhalten einen Methodenendpunkt für jedes "Servlet" (in MVC werden sie als Aktionen bezeichnet) und ermöglichen es Ihnen, programmatisch anzugeben, welche Art von Antwort zurückgegeben werden soll (Text, HTML, JSON usw.). –

Antwort

6

HttpHandlers sollte es in jeder Version .NET-Version nach 2003 tun. Siehe hierzu Microsoft article.

Jedoch, wäre ein moderner (und intitiver) Ansatz, .NET MVC oder genauer .NET Web API zu verwenden.

Zitat von Scott Gu's blog auf seinem asp.net Blog:

„Unsere neue ASP.NET Web API Unterstützung, die Sie leicht erstellen leistungsstarken Web-APIs ermöglicht, die von einem breiten Spektrum von Kunden (im Bereich zugegriffen werden können . von Browsern mit JavaScript, um native Anwendungen auf jedem mobilen/Client Plattform) Es bietet die folgende Unterstützung:“

Und die official Microsoft .NET Web API page Staaten:

ASP.NET-Web-API ist ein Framework, das es einfach macht, HTTP Dienste zu erstellen, die eine breite Palette von Clients einschließlich Browsern und mobilen Geräten erreichen. Die ASP.NET-Web-API ist eine ideale Plattform zum Erstellen von REST-kompatiblen -Anwendungen in .NET Framework.

+0

Von einem schnellen Blick würde ich nicht ganz sagen. Die Servlets in meinen Tomcat-Projekten und diese Dinge, die ich Servlets in meinem ASP.net-Code aufgerufen habe, teilen sich den gleichen Platz mit JSP- bzw. ASPx-Seiten. Meine Beispiele sind eher erfunden, in der Praxis werden sie als JSON-Repräsentation einer Datenbank-Entität verwendet (so ist "example.com/product/1" die HTML-Version, während "example.com/product/1.json" die JSON-Repräsentation ist)) –

+0

Ah ich denke, sehen Sie, wo Sie bekommen. HttpHandlers sollten es tun. Siehe hierzu: http://msdn.microsoft.com/en-us/library/aa478987.aspx – OakNinja

+1

Von der Seite, mit der Sie verknüpft sind: "Die ASP.NET-Seite enthält keinen Code in der ASPX-Datei gleicher Name wie deine Servlet-Klasse. " Es ist beruhigend zu wissen, dass ich selbst gemacht habe, was ein Microsoft Tool automatisch macht (was mich dazu bringt, mich zu wundern) –

1

Ich kann nicht wirklich sagen, dass ich Parallelen zwischen einem Servlet und irgendeiner Art auf asp.net zeichnen kann, da webforms ziemlich unterschiedlich ist.

Von Ihrem Beispielcode kann ich empfehlen, dass Sie einen Blick auf asp.net Webapi werfen, da dies recht gut zu dem, was Sie gerade versuchen, zuordnen wird.

+0

Dies ist: http://www.asp.net/web-api? - Ich habe es mir angeschaut, und sobald ich meine Firma dazu bringen kann, VS2008 aufzugeben und zu VS2012 zu wechseln, beabsichtige ich, einen Großteil meines Codes darauf umzustellen. –

3

Ich glaube, Sie suchen nach einem 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; } 
    } 
} 

Anfragen an sie die gleichen wie Sie Ihre Seiten. yoursite.com/my-handler.ashx?name=foo

+0

Das ist ein interessanter Ansatz. Ich habe das Gefühl, dass Microsoft kurz nach VS2008 mit dieser Art von Entwicklung beschäftigt war. –

+0

Wo jede Millisekunde zählt (wie für eine Autovervollständigung), benutze ich immer noch diese Low-Level-Handler, weil sie [High-Performer] sind (http://www.west-wind.com/weblog/posts/2012/Sep/04/ASPNET -Frameworks-und-Raw-Throughput-Leistung) –

2

Ich hatte eine ähnliche Frage und einige Nachforschungen zu ihr endete mit Web-API. Willst du mit SO teilen.

In der MSDN-Website, http://msdn.microsoft.com/en-us/library/jj823172(v=vs.110).aspx

ein Video-Tutorial gefunden, wo sie für die Maschine cosumption wie iPhone oder Web-App-Clients von JSON oder XML sagten, dass, Web-API-Option empfohlen. Es ist um den letzten Teil des Videos.

Während für komplexere Maschine zu Maschine Kommunikation WCF bevorzugt ist.

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

Hier ist ein Screenshot von ihrer Präsentation.

enter image description here

+0

Mein Zyniker Meinung von WCF ist, dass es die Client-Consumer-Seite für alle Sprachen außer .NET-Sprachen wild kompliziert. In einem reinen.Nettostapel Ich kann die Vorteile sehen, aber es ist einfach keine Fähigkeit, in die ich viel investiert habe. Ich bevorzuge meine Dienste schlank und klar, egal ob sie von JavaScript in einem Browser (oder einem Server) oder C# oder Python konsumiert werden. Grundsätzlich nicht meine Tasse Tee, aber nicht jeder ist in der gleichen Position und das ist gut Infnornation also für die +1 :) –

0

ähnlichen Owin

'OWIN zwischen .NET Web-Server und Web-Anwendungen, die eine Standard-Schnittstelle definiert.'

Verwandte Themen