.net WebService方法之重载、支持Session、支持request请求和response格式的浅析

.net的webservice不支持web方法的重载,但是可以通过设置WebMethod属性的MessageName字段来达到重载web方法的目的。

通过设置WebMethod属性的EnableSession=true,可让webservice支持session。

通过设置ScriptMethod属性的UseHttpGet=false,可让web方法只接受post请求;如果UseHttpGet=true,可让web方法接受get请求。

通过设置ScriptMethod属性的ResponseFormat,可设置web方法响应的格式。如:ResponseFormat = ResponseFormat.Json。

上代码说明:

.net的webservice代码:

    [WebMethod(Description = "验证登录操作", EnableSession = true, MessageName = "Login")]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public Result Login(string userName, string pwd) {
        Result rc = null;

        try {
            if (userName == "1" && pwd == "1") {
                Session["User"] = new UserInfo { UserName = userName, pwd = pwd };
                rc = Result.ToResult("true", "登录成功");
            }
            else rc = Result.ToResult("false", "登录失败");
        }
        catch (Exception ex) {
            // 可以在此保存日志
            rc = Result.ToResult("false", ex.Message);
        }

        return rc;
    }

    [WebMethod(Description = "验证登录", EnableSession = true, MessageName = "IsLogin")]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public Result IsLogin() {
        Result rc = null;

        try {
            rc = Session["User"] != null ? Result.ToResult("true", "已经登录") : Result.ToResult("false", "暂未登录");
        }
        catch (Exception ex) {
            rc = Result.ToResult("false", ex.Message);
        }

        return rc;
    }

    public class Result {
        public string Code { get; set; }
        public string Message { get; set; }

        public static Result ToResult(string code, string message) {
            return new Result { Code = code, Message = message };
        }
    }

同站点下的html代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta charset="utf-8" />
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script>
        function login() {
            var url = "http://localhost/wst/Service.asmx/Login";
            $.ajax({
                url: url,
                type: ‘POST‘,
                data: ‘{"userName":"1","pwd":"1"}‘,//和WebService的web方法的参数一一对应
                dataType: ‘json‘,
                cache:false,
                contentType: ‘application/json‘,//
                error: function () { },
                success: function(data){
                    if (data.d != null) {
                        alert(data.d.Code+"  "+data.d.Message);
                    }
                    else alert("请求失败!");
                }
            });
        }

    </script>
</head>
<body>
    <input type="button" value="登录" onclick="login()"/>

</body>
</html>

用jQuery的ajax访问同源的webserver方法。

时间: 2024-10-07 04:14:05

.net WebService方法之重载、支持Session、支持request请求和response格式的浅析的相关文章

webservice方法内用了session,asp.net调用时注意问题

可搜索相关:ASP.NET WebService 中使用 ASP.NET_SessionId 当前问题是:我们写了WebService给客户调用,第一个方法是登陆,传入用户名和密码,成功后在Webservice内会用session保存当前登陆的用户,登陆成功后调用第二个方法查询数据,会判断session是否存在当前登陆的用户. 调用问题:登陆没有问题.但是调用查询数据方法总是有错误. 问题分析:调用登陆方法后,session是存在服务器端的,会像客户机器写入cookie,cookie内存的是服务

Web API 开启Session支持

Web API中默认是没有开启Session支持的,开启Session支持,需要进行以下操作,以下操作分两种,都是在Global.asax文件中添加代码的. 这时要在Global.asax里添加如下代码,开启Session功能(重写Init方法) /// <summary> /// 开启WebAPI中的Session支持 /// </summary> public override void Init() { this.PostAuthenticateRequest += (sen

WebApi 能支持Session

由于项目实际需要,我希望让WebApi服务也能支持Session,所以便查找资料按照网上的方法开始着手实验. 然后就有了以下的代码,主要是说让WebApi支持Session,要重写Global.asax的Init方法 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configuration.EnableCo

MVC4 WebApi开发中如果想支持Session请做好如下几个方面的问题

1.在WebApiConfig中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它 public class SessionRouteHandler : HttpControllerHandler,IRequiresSessionState { public SessionRouteHandler(RouteData routeData) : base(routeData) { } } public class SessionCon

有什么简单的方法能够检测电脑是否支持U盘启动

基本上现在的电脑都是支持U盘启动的,但有一些用户的电脑比较老式,不确定是否支持U盘启动.那么有没有什么比较简单的方法能够检测电脑是否支持U盘启动呢?小编这就告诉你. 当前大部分的U盘启动制作工具把U盘制作成USB-HDD启动模式的,根据现在的主板情况来看,主板基本上都支持USB-HDD启动了.具体检测方法如下: 将你制作好的U盘启动盘插入主板USB接口(最好将其他无关的USB设备暂时拔掉),重启电脑,在系统自检的界面时根据提示不停地按U盘快速启动热键,会出现Boot Menu菜单,同时还有几种选

.net webapi项目中支持session

webapi中默认是不支持session的开启的 需要在Global.asax文件中,添加如下代码 public override void Init() { this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior( System.Web.SessionState.SessionStateBehavior.Required); base.Init(); }

Webservice服务中如何保持Session

问题一:webservice服务中如果保持Session 调用Session 对于Web Service,每个方法的调用都会启动一个Session,可以用下面的方法来使多个调用在同一个Session里 CWSSyscfg cwsCfg = new CWSSyscfg(); cwsCfg.CookieContainer = new System.Net.CookieContainer(); CWSSyscfg是一个Web Service类,Web Service的给代理类设置CookieConta

Kong管理UI -kong-dashboard (附kong封装webservice方法)

本文仍然是在centos 6.7的环境下进行                 本文转载请注明出处 —— xiaoEight btw如果要正常使用管理UI,前提为kong已经正常run(可参考)起来,此UI可看作为一层薄薄的皮,包装好了我们需要的请求与返回的显示问题(懒人必备?). 附kong封装webservice方法,小Eight处理的小方法 在Kong的git上可以看到丰富的三方工具,本文选用的管理UI也是上面的一个admin ui 项目 Here is a list of third-pa

RDO远程连接时提示“远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助”

当服务器重装操作系统后使用RDO远程连接时会出现错误提示"远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助" 如下图所示 原因是服务器版操作系统提高了安全级别,使用了网络级别的身份验证信息.RDO模拟的是WinXP系统的远程连接,安全系数较低.所以会出现在同一个win764旗舰版机器上使用系统自带的远程桌面能连接,但使用RDO就连接不上去的情况. 解决方法如下:  第一步: 使用系统自带的远程桌面(mstsc.exe)连接服务器, 运