0

だから私はajaxを使ってRESTサービスを呼んでいます:

$("#loginsubmit").on('click', function () {
    showtooltip('Please wait...', false);
    $('#loginsubmit').attr("disabled", true);
    $.ajax({
        url: '@Utility.ConstructRestURL("Authenticate/Login")',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({
            client: {
                SessionID: '@Utility.GetSession(Utility.GetConfigString("ClientSessionID"))'
            },
            loginfo: {
                u: $("#loginusername").val(),
                p: $("#loginpassword").val()
            }
        }),
        success: function (response) {
            if (response.LoginResult.SessionID != null || response.LoginResult.UserID != null || response.LoginResult.SourceIP != null) {
                $.post('@Url.Action("SaveSession", "Auth")', response.LoginResult, function (msg) {
                    window.location.replace(msg.url);
                });
            } else {
                showtooltip('Login failed.', false);
                $('#loginsubmit').removeAttr("disabled");
            }
        },
        error: function (xhr, ajaxOptions, error) {
            showtooltip(xhr.status + ': ' + error, false);
            $('#loginsubmit').removeAttr("disabled");
        }
    });
});  

そして、ほとんどのサービスはクラスオブジェクトを返します。

    [WebInvoke(UriTemplate = "Login", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
    public CModel.DTO.UserSessionDTO Login(CModel.Entities.ClientAuthentication client, CModel.DTO.LoginCredentials loginfo)
    {
        loginfo.i = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        CModel.Logic.IAuthenticate svc = CModel.Logic.ConfigAndResourceComponent.Container().Resolve<CModel.Logic.IAuthenticate>();
        CModel.Entities.UserSession session = svc.Login(client, loginfo);
        CModel.DTO.UserSessionDTO copied = Mapper.Map<CModel.Entities.UserSession, CModel.DTO.UserSessionDTO>(session);
        return copied;
    }  

public class UserSessionDTO
{
    public string SourceIP { get; set; }
    public string SessionID { get; set; }
    public long UserID { get; set; }
}  

例外が発生した場合:

ここに画像の説明を入力してください

400: Bad requestクライアント側に「」エラーが表示されます(ajaxから返されたエラー)。
ajaxに表示したかったのは、例外メッセージ「InvalidLogin」です。

私の解決策はこれですが、それでも私はそれを行う方法がわかりません。

例外がスローされると、rest-projectはエラーメッセージを作成するメソッドを呼び出し、作成されたメッセージが戻り値になります。

または、より良いアイデアがあれば、共有してください。

4

1 に答える 1

0

RestWebFaultExceptionサービスを使用している場合は、を使用する必要があり、SOAPサービスを使用している場合は、を使用する必要がありますFaultException

于 2012-04-30T01:44:58.603 に答える