簡體   English   中英

使用C#asp.net打印json

[英]Printing json with C# asp.net

好了,所以我有一些jQuery代碼,它們會將AJAX請求發送到aspx文件。

我的Spellchecker.aspx文件如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Spellchecker.aspx.cs" Inherits="Spellchecker" %>
<head id="Head1" runat="server" />

我必須放置這個“ head”標簽,否則我將在web.config文件(該網站的其他頁面需要該文件)中收到有關“ <頁面主題”的錯誤。 這意味着來自服務器的響應采用以下形式:<JSON HERE> <head ... />這是錯誤的,因為代碼應僅返回json數據。

在aspx.cs文件中,我將在Page_Load中返回字典轉換為json的內容:

dict.Add("just_json", json_obj);
JavaScriptSerializer serializer = new JavaScriptSerializer(); //creating serializer instance of JavaScriptSerializer class
string json = serializer.Serialize((object)dict);

Response.Write(json);
}

因此,在警報框中,我看到json數據,后跟<head id =“ Head1”> <link href ...“樣式表等。

我該如何做,以便僅從aspx返回JSON數據?

更新:我想我明白了。 將Theme =“ =”放在aspx文件的“%Page”標記中似乎禁用了主題!

回答您的實際問題“我為什么需要head元素”-因為這是ASP.NET將您的CSS鏈接和一些JavaScript導入放入其中的地方。

目前尚不清楚您要在此處執行的操作,但您似乎想創建一個Web服務或將一個方法公開為ScriptMethod。 使用ASPX頁面來輸出對AJAX請求的響應是很奇怪的。

查看ScriptMethodsHttpHandlers

HttpHandlers允許您完全管理響應。 因此,您將創建一個處理程序並將其掛接到“ SpellChecker.ashx”,該處理程序可以直接寫入響應流。

public class SpellCheckerHttpHandler : IHttpHandler
{
    public bool IsReusable { get { return true; } }

    public void ProcessRequest(HttpContext context)
    {
        //Write out the JSON you want to return.
        string json = GetTheJson();

        context.Response.ContentType = "application/json";
        context.Response.Write(json);
    }
}

然后,在system.webServer元素內的Web.Config中,添加:

<handlers>
    <add name="SpellChecker" path="~/SpellChecker.ashx" type="MyNamespace.HttpHandlers.SpellCheckerHttpHandler, MyAssembly" />
</handlers>

現在,您可以向處理程序發出請求,例如http://localhost/SpellChecker.ashx?TextToCheck=xyz

如果您的頁面正在處理輸入和輸出JSON,請考慮使用以ashx結尾的“通用處理程序”頁面而不是以asmx結尾的“ Web頁面”。 它的開銷要少得多,並且不會嘗試加載主題等。

您可以通過控制輸出的Content-Type來輸出JSON而不是XML或其他內容:

context.Response.ContentType = "application/json";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM