ホームページ > ウェブフロントエンド > jsチュートリアル > データ送信 format_json として JSON を使用する場合のいくつかの問題の概要

データ送信 format_json として JSON を使用する場合のいくつかの問題の概要

WBOY
リリース: 2016-05-16 17:58:07
オリジナル
1208 人が閲覧しました

JSON データをクライアントに提供する方法
1. WCF を使用して Json データを提供する
WCF を使用してクライアントに Json データを提供することに注意する必要があります。
A. WebInvokeAttribute のコントラクトの定義、または WebGetAttribute の ResponseFormat が WebMessageForm.Json に設定されている場合、

コードをコピー コードは次のとおりです:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "IsExistSSID/{SSID}"、RequestFormat = WebMessageFormat.Json、BodyStyle = WebMessageBodyStyle.Bare)]

B. EndPointBehavior は WebHttp を使用します
コードをコピーします コードは次のとおりです。





C. バインディング メソッドは webHttpBinding を使用します

🎜> コードは次のとおりです。 <サービス名="XX.DeviceUIService" behaviourConfiguration="UIAjaxServiceBehavior">
<エンドポイントアドレス="" behaviourConfiguration=" UIAjaxEndpointBehavior"
binding="webHttpBinding" Contract="DeviceUIServiceContract" /> ;




2. .Net MVC アクションを使用して JSON データを提供します
1. ValueProviderFactories.Factories.Add(new JsonValueProviderFactory() ) では、MVC3 を使用している場合、これに注意する必要はありません。 . JsonResult をアクションの戻り値として使用します。 3. 返すには、return Json(XXX) を使用します。XXX は返すデータであり、そのデータ型は接尾辞として asmx を持つ単純な WebService である必要があります。実装するには、
4. HttpHandler メカニズムを使用して実装します。

WCF は Microsoft システムの下で通信プラットフォームとして定義されているため、後者の 2 つは実装できます。以前の実装方法と同じなので、ここでは WCF を使用し、提供されたデータをシステムのデータ提供インターフェイスとして直接見なしました。
.NET MVC 環境では、Json 形式でのデータの出力が直接サポートされているため、.NET 以外では、 MVC 環境は WCF によって提供され、.NET MVC 環境では、JSON アクションのサポートが直接選択されます。
WEB クライアント処理JQuery Ajax 処理を使用します。
dataType を「json」形式に設定します。データ受信時に自動的に使用されます。 結果を json オブジェクト形式に変換します。



コードをコピーします。

コードは次のとおりです。 > $.ajax( { url: 'urladdress' type: 'GET', contentType: 'application/json', dataType: 'json', cache : false,
async: false,
error: JQueryAjaxErrorHandler,
success: function (result) { }
});



例外処理に関する考慮事項


ここでは主に Web 環境での例外処理について考えます。HTTP プロトコルの定義に従って、各リクエストは
HTTP ステータス コード
を返します。異なるコードは異なる意味を表します。したがって、Web アプリケーションもこのようになり、さまざまな結果に応じてさまざまな
HTTP ステータス コード
を返す必要があります。たとえば、200 はサーバーからの正しい戻り値を表し、417 は予期されるサーバー例外を表します。リクエストが存在しない等、301 弊社が不正です。
WCF 環境では、まず次のように各メソッドに FaultContract を追加する必要があります:
FaultContract(typeof(WebFaultException))

次に、サービスが正しい HTTP ステータス コードを返せるようにするための例外です。
コードをコピーします


コードは次のとおりです。


try
{
//BussinessCode....
}
catch (DuplicateException ex)
{
throw new WebFaultJsonFormatException(new WebErrorDetail (例:メッセージ、例)、HttpStatusCode.ExpectationFailed);
}
catch (NotExistException ex)
{
throw new WebFaultJsonFormatException(new WebErrorDetail(ex.Message, ex), HttpStatusCode.ExpectationFailed);
}
catch (AppException ex)
{
throw new WebFaultJsonFormatException(new WebErrorDetail(ex.Message, ex), HttpStatusCode.ExpectationFailed);
}
catch (Exception ex)
{
throw new WebFaultJsonFormatException(new WebErrorDetail(ex.Message, ex), HttpStatusCode.ExpectationFailed);
}
この中の WebFaultJsonFormatException の名前は次のとおりです:
[Serializable, DataContract]
public class WebFaultJsonFormatException : WebFaultException
{
public WebFaultJsonFormatException(Tdetail, HttpStatusCode statusCode)
:base(detail, statusCode)
{
ErrorDetailTypeValidator(detail);
}
public WebFaultJsonFormatException(T 詳細, HttpStatusCode statusCode, IEnumerable knownTypes)
: Base(detail, statusCode, knownTypes)
{
ErrorDetailTypeValidator(detail);
}
private void ErrorDetailTypeValidator(T 詳細)
{
foreach (詳細の DataContractAttribute 項目.GetType().GetCustomAttributes(typeof(DataContractAttribute), true))
{
if (item.IsReference)
throw new WebFaultJsonFormatException(new PureWebErrorDetail("転送コード タイプが JSON fromat の場合、{0} に適用された DataContractAttribute プロパティ 'IsReference' は true にはなりません。", typeof(T ).FullName)、HttpStatusCode.ExpectationFailed);
}
}
}
[Serializable, DataContract(IsReference = false)]
public class PureWebErrorDetail
{
public PureWebErrorDetail(string message, params object[] args)
{
this.Message = string.Format(message, args);
}
[DataMemberAttribute]
public string Message { get;セット; }
}

JSON でデータ転送を行っているため、DataContract 内の IsReference は true になることができません。これは、XML と比較して、XML がデータをサポートできることを意味します。循環参照、JSON はサポートされていないため、WebFaultJsonFormatException の作用により、現在の JSON データ型の DataContract の IsReference が true であるかどうかが判断され、結果として、私が決定した良い通知情報が返されます。 この定義が採用されていない場合、JQUERY Ajax で受信した HTTP ステータス コード は 15??? の 1 つの错误代コードですが、この错误代コードは通常の HTTP ステータス コード ではありません。范围。

常に処理される一つの误区
最早時、この方法で処理することを想定していないため、また長久写代犯の下の1つの問題、すべての方法が追加されました1 つの固定された泛型は、
复制代 代码如下:

[DataContract]
public class TmResult
{
[DataMember]
public bool Success { get;セット; }

[DataMember]
public string ErrorMessage { get;セット;

[DataMember]
パブリック文字列 FullMessage { get;セット;

[DataMember]
パブリック文字列 CallStack { get;セット; }
}

[DataContract]
public class TmResult; : TmResult
where T : class
{
[DataMember]
public T Model { get;セット; }
}

都市がある 1 つの成功を表すか成功したかどうか、ErrorMessage を表す错误状況下の错误情報、このような方法で毎回返される HTTP ステータス コード 都是 200

故に此也体会は各種标標準の好处、熟徹底标準、熟悉编程モデル及び各種API、我们的开公開会更简单、更轻松。
上都是按个人理解所写,有不对之处请指正。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート