自定义动作可以用来扩展 UrlRewriter.NET组件功能。
以下是创建自定义动作的步骤:
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;
}
/// <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";
}
}
}
<register
parser="MyNamespace.Parsers.SetStatusActionParser,
MyAssembly" />
<myaction status="405" />