开源地址重写

Open Source URL Rewriter for .NET / IIS / ASP.NET
英文官方站:UrlRewriter.NET    中文支持站:UrlRewriter.CN
您的位置:首页参考手册详细参考动作创建自定义动作 → 浏览:创建自定义动作

创建自定义动作

自定义动作可以用来扩展 UrlRewriter.NET组件功能。

以下是创建自定义动作的步骤:

  1. 创建一个继承于IRewriteAction接口的类。当动作被请求的时候就会执行。
    public class SetStatusAction : IRewriteAction
    {
    /// <summary>
    /// Default constructor.
    /// </summary>
    /// <param name=”statusCode”>The status code
    to set.</param>
    public SetStatusAction(HttpStatusCode statusCode)
    {
    _statusCode = statusCode;
    }

    /// <summary>
    /// The status code.
    /// </summary>
    public HttpStatusCode StatusCode
    {
    get
    {
    return _statusCode;
    }
    set
    {
    _statusCode = value;
    }
    }

    /// <summary>
    /// Executes the action.
    /// </summary>
    /// <param name=”context”>The rewriting
    context.</param>
    public void Execute(RewriteContext context)
    {
    context.StatusCode = StatusCode;
    }

    /// <summary>
    /// The Processing directive.
    /// </summary>
    public RewriteProcessing Processing
    {
    get
    {
    if ((int)StatusCode >= 300)
    {
    return RewriteProces
    sing.StopProcessing;
    }
    else
    {
    return RewriteProces
    sing.ContinueProcessing;
    }
    }
    }

    private HttpStatusCode _statusCode;
    }
  2. 创建一个解析器类,它继承于 IRewriteActionParser接口。此类的作用主要是读取重写规则,并注册你的动作。
    /// <summary>
    /// Action parser for the set-status action.
    /// </summary>
    public class SetStatusActionParser : IRewriteActionParser
    {
    /// <summary>
    /// Default constructor.
    /// </summary>
    public SetStatusActionParser()
    {
    }

    /// <summary>
    /// Parses the node.
    /// </summary>
    /// <param name=”node”>The node to parse.</param>
    /// <param name=”config”>The rewriter
    configuration.</param>
    /// <returns>The parsed action, or null if no
    action parsed.</returns>
    public IRewriteAction Parse(XmlNode node, object config)
    {
    XmlNode statusCodeNode = node.
    Attributes.GetNamedItem("status");
    if (statusCodeNode == null)
    {
    return null;
    }
    return new SetStatusAction((HttpStatusCode)
    Convert.ToInt32(statusCodeNode.Value));
    }

    /// <summary>
    /// Whether the action allows nested actions.
    /// </summary>
    public override bool AllowsNestedActions
    {
    get
    {
    return false;
    }
    }

    /// <summary>
    /// Whether the action allows attributes.
    /// </summary>
    public override bool AllowsAttributes
    {
    get
    {
    return true;
    }
    }

    public string Name
    {
    get
    {
    return "myaction";
    }
    }
    }
  3. 注册自定义解析器:
    <register
    parser="MyNamespace.Parsers.SetStatusActionParser,
    MyAssembly" />
  4. 使用自定义动作:
    <myaction status="405" />
参考