Senparc.Weixin 本地容器缓存策略 LocalCacheStrategy的构造函数 获取所有 Bag 对象 【异步方法】获取所有 Bag 对象 Container的领域缓存策略定义 LocalCacheStrategy的构造函数 如果 容器策略(领域缓存)基类 数据源缓存策略 向底层缓存注册当前缓存策略 获取所有 Bag 对象 获取单个ContainerBag 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 【异步方法】获取所有 Bag 对象 【异步方法】获取单个ContainerBag 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 【异步方法】更新 ContainerBag 容器缓存策略接口(属于扩展领域缓存) 获取所有ContainerBag 获取单个ContainerBag 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 更新ContainerBag 超时时间 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 【异步方法】获取所有ContainerBag 【异步方法】获取单个ContainerBag 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 【异步方法】更新ContainerBag 超时时间 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 所有子模块ApiHandlerWapper方法调用的基础方法 返回配置错误结果信息(不抛出异常) 返回 JsonResult 错误结果信息(不抛出异常) TryCommonApi 方法的基类 平台类型,PlatformType枚举 AccessTokenContainer中的GetFirstOrDefaultAppId()方法 AccessTokenContainer中的bool CheckRegistered(appId,getNew)方法 AccessTokenContainer中的AccessTokenResult GetAccessTokenResult(appId)方法 "ReturnCode.获取access_token时AppSecret错误或者access_token无效"枚举的值 公众号、小程序中的 AppId,或企业微信中的 AppKey(由AppId+AppSecret组成) TryCommonApi 方法的基类 平台类型,PlatformType枚举 AccessTokenContainer中的GetFirstOrDefaultAppId()方法 AccessTokenContainer中的bool CheckRegistered(appId,getNew)方法 AccessTokenContainer中的AccessTokenResult GetAccessTokenResultAsync(appId)方法(异步方法) "ReturnCode.获取access_token时AppSecret错误或者access_token无效"枚举的值 公众号、小程序中的 AppId,或企业微信中的 AppKey(由AppId+AppSecret组成) 所有高级接口共用的向微信服务器发送 API 请求的方法 设定条件,当API结果没有返回成功信息时抛出异常 设定条件,当API结果没有返回成功信息时抛出异常 向需要AccessToken的API发送消息的公共方法 这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数 如果是Get方式,可以为null 代理请求超时时间(毫秒) 请求 Header 中的 Content-Type,输入 null 则自动设置 向需要AccessToken的API发送消息的公共方法 这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数 用accessToken参数填充{0} 如果是Get方式,可以为null 代理请求超时时间(毫秒) 验证服务器证书回调自动验证 请求 Header 中的 Content-Type,输入 null 则自动设置 向需要AccessToken的API发送消息的公共方法 这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数 如果是Get方式,可以为null 代理请求超时时间(毫秒) 验证服务器证书回调自动验证 请求 Header 中的 Content-Type,输入 null 则自动设置 向需要AccessToken的API发送消息的公共方法 这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数 如果是Get方式,可以为null。在POST方式中将被转为JSON字符串提交 发送类型,POST或GET,默认为POST 代理请求超时时间(毫秒) 验证服务器证书回调自动验证 JSON字符串生成设置 请求 Header 中的 Content-Type,输入 null 则自动设置 给 API 用的公共 DI 参数 Senparc.Weixin 全局设置 指定是否是Debug状态,如果是,系统会自动输出日志。 如果 CO2NET.Config.IsDebug 为 true,则此参数也会为 true,否则以此参数为准。 默认微信配置 微信全局配置 注意:在程序运行过程中修改 SenparcWeixinSetting.Items 中的微信配置值,并不能修改 Container 中的对应信息(如AppSecret), 如果需要修改微信信息(如AppSecret)应该使用 xxContainer.Register() 修改,这里的值也会随之更新。 微信支付使用沙箱模式(默认为false) 请求超时设置(以毫秒为单位),默认为10秒。 说明:此处常量专为提供给方法的参数的默认值,不是方法内所有请求的默认超时时间。 网站根目录绝对路径 网站根目录绝对路径 默认缓存键的第一级命名空间,默认值:DefaultCache 当 JsonResult 不为“成功”状态时,是否抛出异常,默认为 true 公众号(小程序)、开放平台 API 的服务器地址(默认为:https://api.weixin.qq.com) 公众号(小程序)、开放平台【文件下载】 API 的服务器地址(默认为:https://api.weixin.qq.com) 2020年9月15日停止使用http://file.api.weixin.qq.com域名:https://developers.weixin.qq.com/community/develop/doc/0002245dcdc8c06f36fa6a47d56400 企业微信 API 的服务器地址(默认为:https://qyapi.weixin.qq.com) 微信支付 API 的服务器地址(默认为:https://api.mch.weixin.qq.com) 默认的AppId检查规则 IBaseContainer 带IBaseContainerBag泛型的IBaseContainer 微信容器接口(如Ticket、AccessToken) 获取符合当前缓存策略配置的缓存的操作对象实例 进行注册过程的委托集合 如果注册不成功,测尝试重新注册(前提是已经进行过注册),这种情况适用于分布式缓存被清空(重启)的情况。 最简短的Key,比如AppId,不需要考虑容器前缀 获取ItemCollection缓存Key 最简短的Key,比如AppId,不需要考虑容器前缀 返回已经注册的第一个AppId 获取所有容器内已经注册的项目 (此方法将会遍历Dictionary,当数据项很多的时候效率会明显降低) 尝试获取某一项Bag 尝试获取某一项Bag中的具体某个属性 具体某个属性 更新数据项 即bag.Key 为null时删除该项 更新已经添加过的数据项 为null时删除该项 更新数据项(本地缓存不会改变原有值的 HashCode) 为null时删除该项 检查Key是否已经注册 从缓存中删除指定项 返回已经注册的第一个AppId 获取所有容器内已经注册的项目 (此方法将会遍历Dictionary,当数据项很多的时候效率会明显降低) 尝试获取某一项Bag 尝试获取某一项Bag中的具体某个属性 具体某个属性 更新数据项 即bag.Key 为null时删除该项 更新已经添加过的数据项 为null时删除该项 更新数据项(本地缓存不会改变原有值的 HashCode) 为null时删除该项 检查Key是否已经注册 从缓存中删除指定项 IBaseContainerBag,BaseContainer容器中的Value类型 用于标记,方便后台管理 缓存键,形如:wx669ef95216eef885,最底层的Key,不考虑命名空间等 当前对象被缓存的时间 提供给具有 AppId 的 IBaseContainerBag 使用的接口 AppId BaseContainer容器中的Value类型 用于标记,方便后台管理 通常为AppId 缓存时间,不使用属性变化监听 储存 Container 注册过程方法的集合 用于实现INotifyPropertyChanged 设置属性 access_token请求后的JSON返回格式 获取到的凭证 凭证有效时间,单位:秒 用户的昵称 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间 WxJsonResult 等 Json 结果的基类(抽象类),子类必须具有不带参数的构造函数 返回结果信息 errcode的 所有 JSON 格式返回值的API返回结果接口 返回结果信息 errcode的 JSON 数据(序列化)回调接口 序列化前回调 序列化后回调 反序列化前回调 反序列化后回调 企业号 JSON 返回结果 返回代码 返回消息代码数字(同errcode枚举值) 企业微信 JSON 返回结果 返回代码 返回消息代码数字(同errcode枚举值) 包含 errorcode 的 Json 返回结果接口 返回结果代码 公众号 JSON 返回结果(用于菜单接口等),子类必须具有不带参数的构造函数 返回消息代码数字(同errcode枚举值) 无参数的构造函数 Senparc.Weixin JSON 配置 是否处于 Debug 状态(仅限微信范围) 系统中所有微信设置的参数,默认已经添加一个 Key 为“Default”的对象 从 Items 中获取对应键的参数 SenparcWeixinSetting 构造函数 SenparcWeixinSetting 构造函数 是否开启 Debug 模式 是否是根节点,如果是,将创建下级 Items 节点 从 Web.Config 文件自动生成 SenparcWeixinSetting 设置微信的 Debug 状态 Senparc.Weixin SDK 中单个公众号配置信息 唯一标识 公众号Token 公众号消息加密Key 公众号AppId 公众号AppSecret 小程序AppId 小程序AppSecret 小程序 Token 小程序EncodingAESKey 企业微信CorpId(全局) 企业微信 AgentId(单个应用的Id),一般为数字 企业微信CorpSecret(和 AgentId对应) Token EncodingAESKey WeixinPay_PartnerId(微信支付V2) WeixinPay_Key(微信支付V2) WeixinPay_AppId(微信支付V2) WeixinPay_AppKey(微信支付V2) WeixinPay_TenpayNotify(微信支付V2) MchId(商户ID) 特约商户微信支付 子商户ID,没有可留空 MchKey 微信支付证书位置(物理路径),在 .NET Core 下执行 TenPayV3InfoCollection.Register() 方法会为 HttpClient 自动添加证书 微信支付证书密码,在 .NET Core 下执行 TenPayV3InfoCollection.Register() 方法会为 HttpClient 自动添加证书 微信支付AppId 微信支付AppSecert 特约商户微信支付 子商户AppID 特约商户微信支付 子商户AppSecret 微信支付TenpayNotify 微信支付(V3)证书私钥 获取途径:apiclient_key.pem 微信支付(V3)证书序列号 查看地址:https://pay.weixin.qq.com/index.php/core/cert/api_cert#/api-cert-manage APIv3 密钥。在微信支付后台设置:https://pay.weixin.qq.com/index.php/core/cert/api_cert#/ 小程序微信支付WxOpenTenpayNotify Component_Appid Component_Secret 全局统一的 Component_Token(非必须) 全局统一的 Component_EncodingAESKey(非必须) SenparcWeixinSetting基础接口 唯一标识 公众号 公众号Token 公众号消息加密Key 公众号AppId 公众号AppSecret 小程序 小程序AppId 小程序AppSecret 小程序 Token 小程序EncodingAESKey 企业号 企业微信CorpId 企业微信 AgentId(单个应用的Id),一般为数字 企业微信CorpSecret(和 AgentId对应) Token EncodingAESKey 微信支付(旧版) WeixinPay_PartnerId(微信支付V2) WeixinPay_Key(微信支付V2) WeixinPay_AppId(微信支付V2) WeixinPay_AppKey(微信支付V2) WeixinPay_TenpayNotify(微信支付V2) 微信支付V3 MchId(商户ID) 子商户 MchId,没有可留空 MchKey 微信支付证书地址,物理路径(如 D:\\cert\\cert.p12) 微信支付证书密码 微信支付AppId 微信支付AppKey 子商户微信支付AppId 子商户微信支付AppKey 微信支付TenpayNotify 微信支付(V3)证书私钥 获取途径:apiclient_key.pem 微信支付(V3)证书序列号 查看地址:https://pay.weixin.qq.com/index.php/core/cert/api_cert#/api-cert-manage APIv3 密钥。在微信支付后台设置:https://pay.weixin.qq.com/index.php/core/cert/api_cert#/ 小程序微信支付WxOpenTenpayNotify 开放平台 Component_Appid Component_Secret 全局统一的 Component_Token(非必须) 全局统一的 Component_EncodingAESKey(非必须) 扩展 SenparcWeixinSettingItem 集合 设置或获取 SenparcWeixinSettingItem,key 不存在时会自动创建对象,因此不需要判断 key 是否存在 SenparcWeixinSettingItem 标识 模板消息数据,JSON 格式形如 { "key1": { "value": any }, "key2": { "value": any } } 模板内容,JSON 格式形如: { "value": any } 模板消息数据基础类接口 Url,为null时会自动忽略 Url,为null时会自动忽略 模板名称 模板消息数据基础类 每个公众号都不同的templateId Url,为null时会自动忽略 模板名称 CommonJsonSend中的http提交类型 GET 方法 POST 方法 平台类型 公众号 开放平台 小程序 企业号 企业微信 公众号返回码(JSON) 应该更名为ReturnCode_MP,但为减少项目中的修改,此处依旧用ReturnCode命名 公众号:不合法的凭证类型 小程序:暂无生成权限 微信:不合法的APPID 小程序:生成权限被封禁 [小程序订阅消息]用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系 [小程序订阅消息]模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错 客服帐号名长度超过限制(仅允许10个英文字符,不包括@及@后的公众号的微信号)(invalid kf_acount length) 客服帐号名包含非法字符(仅允许英文+数字)(illegal character in kf_account) 客服帐号个数超过限制(10个客服账号)(kf_account count exceeded) 小程序为“签名错误”。对应公众号: 87009, “errmsg” : “reply is not exists” //该回复不存在 公众号:输入参数有误 小程序:参数expire_time填写错误 企业号返回码 企业微信返回码 (1不是一棵树,2 多个一样的partyid,3 partyid空,4 partyid name 空,5 同一个父节点下有两个子节点 部门名字一样 可能是以上情况,请一一排查) 第三方平台未发布 该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接) 每个月只可以修改50次,超次数了 语言 中文简体 中文繁体 英文 用户信息中的性别(sex) 用户信息中的性别(sex) JSON返回错误代码异常(比如access_token相关操作中使用) JsonResult 接口 URL ErrorJsonResultException 异常消息 内部异常 WxJsonResult API地址 MessageHandler异常 未知请求类型异常 未注册 AppId 异常 微信自定义异常基类 当前正在请求的公众号AccessToken或AppId WeixinException 异常消息 是否已经使用WeixinTrace记录日志,如果没有,WeixinException会进行概要记录 WeixinException 异常消息 内部异常信息 是否已经使用WeixinTrace记录日志,如果没有,WeixinException会进行概要记录 菜单异常 Null异常 上一级不为null的对象(或对调试很重要的对象)。 如果需要调试多个对象,可以传入数组,如:new {obj1, obj2} 接口或方法过期异常 容器帮助类 获取缓存Key(命名空间,形如:Container:Senparc.Weixin.MP.Containers.AccessTokenBag) 获取ContainerBag缓存Key,包含命名空间(形如:Container:Senparc.Weixin.MP.Containers.AccessTokenBag:wx669ef95216eef885) 最简短的Key,比如AppId,不需要考虑容器前缀 获取ContainerBag缓存Key,包含命名空间(形如:Container:Senparc.Weixin.MP.Containers.AccessTokenBag:wx669ef95216eef885) 获取ContainerBag缓存Key,包含命名空间(形如:Container:Senparc.Weixin.MP.Containers.AccessTokenBag:wx669ef95216eef885) JsonResult 帮助类 获取错误信息中的 rid 信息 errmsg 获取错误信息中的 rid 信息 WxJsonResult 获取错误信息中的 rid 信息 ErrorJsonResultException 微信支付帮助类 获取微信支付(V3)注册 TenPayV3InfoCollection 以及 Cert HrrpClient 时提供的 Key 或 Name 获取微信支付(V3)注册 TenPayV3InfoCollection 以及 Cert HrrpClient 时提供的 Key 或 Name 尝试从文件获取正确格式的私钥 用户帮助类 正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像) 640*640正方形头像 46*46正方形头像 64*64 96*96正方形头像 132*132正方形头像 获取指定大小的用户头像网址 IUserInfo,包括用户头像信息 代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像) 获取指定大小的用户头像网址 用户头像 代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像) 获取关注时间 Indicates that the value of the marked element could be null sometimes, so the check for null is necessary before its usage. [CanBeNull] public object Test() { return null; } public void UseTest() { var p = Test(); var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' } Indicates that the value of the marked element could never be null. [NotNull] public object Foo() { return null; // Warning: Possible 'null' assignment } Indicates that collection or enumerable value does not contain null elements. Indicates that collection or enumerable value can contain null elements. Indicates that the marked method builds string by format pattern and (optional) arguments. Parameter, which contains format string, should be given in constructor. The format string should be in -like form. [StringFormatMethod("message")] public void ShowError(string message, params object[] args) { /* do something */ } public void Foo() { ShowError("Failed: {0}"); // Warning: Non-existing argument in format string } Specifies which parameter of an annotated method should be treated as format-string For a parameter that is expected to be one of the limited set of values. Specify fields of which type should be used as values for this parameter. Indicates that the function argument should be string literal and match one of the parameters of the caller function. For example, ReSharper annotates the parameter of . public void Foo(string param) { if (param == null) throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol } Indicates that the method is contained in a type that implements System.ComponentModel.INotifyPropertyChanged interface and this method is used to notify that some property value changed. The method should be non-static and conform to one of the supported signatures: NotifyChanged(string) NotifyChanged(params string[]) NotifyChanged{T}(Expression{Func{T}}) NotifyChanged{T,U}(Expression{Func{T,U}}) SetProperty{T}(ref T, T, string) public class Foo : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void NotifyChanged(string propertyName) { ... } private string _name; public string Name { get { return _name; } set { _name = value; NotifyChanged("LastName"); /* Warning */ } } } Examples of generated notifications: NotifyChanged("Property") NotifyChanged(() => Property) NotifyChanged((VM x) => x.Property) SetProperty(ref myField, value, "Property") Describes dependency between method input and output.

Function Definition Table syntax:

FDT ::= FDTRow [;FDTRow]* FDTRow ::= Input => Output | Output <= Input Input ::= ParameterName: Value [, Input]* Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value} Value ::= true | false | null | notnull | canbenull If method has single input parameter, it's name could be omitted.
Using halt (or void/nothing, which is the same) for method output means that the methos doesn't return normally.
canbenull annotation is only applicable for output parameters.
You can use multiple [ContractAnnotation] for each FDT row, or use single attribute with rows separated by semicolon.
[ContractAnnotation("=> halt")] public void TerminationMethod() [ContractAnnotation("halt <= condition: false")] public void Assert(bool condition, string text) // regular assertion method [ContractAnnotation("s:null => true")] public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty() // A method that returns null if the parameter is null, // and not null if the parameter is not null [ContractAnnotation("null => null; notnull => notnull")] public object Transform(object data) [ContractAnnotation("s:null=>false; =>true,result:notnull; =>false, result:null")] public bool TryParse(string s, out Person result)
Indicates that marked element should be localized or not. [LocalizationRequiredAttribute(true)] public class Foo { private string str = "my string"; // Warning: Localizable string } Indicates that the value of the marked type (or its derivatives) cannot be compared using '==' or '!=' operators and Equals() should be used instead. However, using '==' or '!=' for comparison with null is always permitted. [CannotApplyEqualityOperator] class NoEquality { } class UsesNoEquality { public void Test() { var ca1 = new NoEquality(); var ca2 = new NoEquality(); if (ca1 != null) { // OK bool condition = ca1 == ca2; // Warning } } } When applied to a target attribute, specifies a requirement for any type marked with the target attribute to implement or inherit specific type or types. [BaseTypeRequired(typeof(IComponent)] // Specify requirement public class ComponentAttribute : Attribute { } [Component] // ComponentAttribute requires implementing IComponent interface public class MyComponent : IComponent { } Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), so this symbol will not be marked as unused (as well as by other usage inspections). Should be used on attributes and causes ReSharper to not mark symbols marked with such attributes as unused (as well as by other usage inspections) Only entity marked with attribute considered used. Indicates implicit assignment to a member. Indicates implicit instantiation of a type with fixed constructor signature. That means any unused constructor parameters won't be reported as such. Indicates implicit instantiation of a type. Specify what is considered used implicitly when marked with or . Members of entity marked with attribute are considered used. Entity marked with attribute and all its members considered used. This attribute is intended to mark publicly available API which should not be removed and so is treated as used. Tells code analysis engine if the parameter is completely handled when the invoked method is on stack. If the parameter is a delegate, indicates that delegate is executed while the method is executed. If the parameter is an enumerable, indicates that it is enumerated while the method is executed. Indicates that a method does not make any observable state changes. The same as System.Diagnostics.Contracts.PureAttribute. [Pure] private int Multiply(int x, int y) { return x * y; } public void Foo() { const int a = 2, b = 2; Multiply(a, b); // Waring: Return value of pure method is not used } Indicates that a parameter is a path to a file or a folder within a web project. Path can be relative or absolute, starting from web root (~). An extension method marked with this attribute is processed by ReSharper code completion as a 'Source Template'. When extension method is completed over some expression, it's source code is automatically expanded like a template at call site. Template method body can contain valid source code and/or special comments starting with '$'. Text inside these comments is added as source code when the template is applied. Template parameters can be used either as additional method parameters or as identifiers wrapped in two '$' signs. Use the attribute to specify macros for parameters. In this example, the 'forEach' method is a source template available over all values of enumerable types, producing ordinary C# 'foreach' statement and placing caret inside block: [SourceTemplate] public static void forEach<T>(this IEnumerable<T> xs) { foreach (var x in xs) { //$ $END$ } } Allows specifying a macro for a parameter of a source template. You can apply the attribute on the whole method or on any of its additional parameters. The macro expression is defined in the property. When applied on a method, the target template parameter is defined in the property. To apply the macro silently for the parameter, set the property value = -1. Applying the attribute on a source template method: [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")] public static void forEach<T>(this IEnumerable<T> collection) { foreach (var item in collection) { //$ $END$ } } Applying the attribute on a template method parameter: [SourceTemplate] public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) { /*$ var $x$Id = "$newguid$" + x.ToString(); x.DoSomething($x$Id); */ } Allows specifying a macro that will be executed for a source template parameter when the template is expanded. Allows specifying which occurrence of the target parameter becomes editable when the template is deployed. If the target parameter is used several times in the template, only one occurrence becomes editable; other occurrences are changed synchronously. To specify the zero-based index of the editable occurrence, use values >= 0. To make the parameter non-editable when the template is expanded, use -1. > Identifies the target parameter of a source template if the is applied on a template method. ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC action. If applied to a method, the MVC action name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String). ASP.NET MVC attribute. Indicates that a parameter is an MVC area. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String). ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC controller. If applied to a method, the MVC controller name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String). ASP.NET MVC attribute. Indicates that a parameter is an MVC Master. Use this attribute for custom wrappers similar to System.Web.Mvc.Controller.View(String, String). ASP.NET MVC attribute. Indicates that a parameter is an MVC model type. Use this attribute for custom wrappers similar to System.Web.Mvc.Controller.View(String, Object). ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC partial view. If applied to a method, the MVC partial view name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String). ASP.NET MVC attribute. Allows disabling inspections for MVC views within a class or a method. ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String). ASP.NET MVC attribute. Indicates that a parameter is an MVC editor template. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String). ASP.NET MVC attribute. Indicates that a parameter is an MVC template. Use this attribute for custom wrappers similar to System.ComponentModel.DataAnnotations.UIHintAttribute(System.String). ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC view. If applied to a method, the MVC view name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Controller.View(Object). ASP.NET MVC attribute. When applied to a parameter of an attribute, indicates that this parameter is an MVC action name. [ActionName("Foo")] public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = Url.Action("Foo"); // OK return RedirectToAction("Bar"); // Error: Cannot resolve action } Razor attribute. Indicates that a parameter or a method is a Razor section. Use this attribute for custom wrappers similar to System.Web.WebPages.WebPageBase.RenderSection(String). Indicates how method invocation affects content of the collection. Method does not use or modify content of the collection. Method only reads content of the collection but does not modify it. Method can change content of the collection but does not add new elements. Method can add new elements to the collection. Indicates that the marked method is assertion method, i.e. it halts control flow if one of the conditions is satisfied. To set the condition, mark one of the parameters with attribute. Indicates the condition parameter of the assertion method. The method itself should be marked by attribute. The mandatory argument of the attribute is the assertion type. Specifies assertion type. If the assertion method argument satisfies the condition, then the execution continues. Otherwise, execution is assumed to be halted. Marked parameter should be evaluated to true. Marked parameter should be evaluated to false. Marked parameter should be evaluated to null value. Marked parameter should be evaluated to not null value. Indicates that the marked method unconditionally terminates control flow execution. For example, it could unconditionally throw exception. Indicates that method is pure LINQ method, with postponed enumeration (like Enumerable.Select, .Where). This annotation allows inference of [InstantHandle] annotation for parameters of delegate type by analyzing LINQ method chains. Indicates that IEnumerable, passed as parameter, is not enumerated. Indicates that parameter is regular expression pattern. XAML attribute. Indicates the type that has ItemsSource property and should be treated as ItemsControl-derived type, to enable inner items DataContext type resolve. XAML attibute. Indicates the property of some BindingBase-derived type, that is used to bind some item of ItemsControl-derived type. This annotation will enable the DataContext type resolve for XAML bindings for such properties. Property should have the tree ancestor of the ItemsControl type or marked with the attribute. Prevents the Member Reordering feature from tossing members of the marked class. The attribute must be mentioned in your member reordering patterns 快捷注册类,RegisterService 扩展类 解密方法 密文 将数字转化成ASCII码对应的字符,用于对明文进行补码 @param a 需要转化的数字 @return 转化得到的字符 模拟生成加密请求消息 微信日志跟踪 记录WeixinException日志时需要执行的任务 记录系统日志 API请求日志(接收结果) WeixinException 日志 ErrorJsonResultException 日志 Get 请求处理 获取随机文件名 Post 请求处理 获取Post结果 URL工具类 生成OAuth用的CallbackUrl参数(原始状态,未整体进行UrlEncode) 微信 API 工具类 判断accessTokenOrAppId参数是否是AppId(或对应企业微信的AppKey) AccessToken或AppId(推荐使用AppId,需要先注册) 获取过期时间 有效时间(秒) 获取过期 TimeSpan 有效时间(秒) 微信注册 开始 Senparc.Weixin SDK 初始化参数流程 微信全局设置参数,必填 用于提供 SenparcSetting.Cache_Redis_Configuration 和 Cache_Memcached_Configuration 两个参数,如果不使用这两种分布式缓存可传入null 开始 Senparc.Weixin SDK 初始化参数流程