东西,你可以实现自己的操作调用:
public class CleanOperationInvoker:IOperationInvoker
{
private readonly IOperationInvoker _invoker;
public CacheOperationInvoker(IOperationInvoker invoker)
{
_invoker = invoker;
}
public object Invoke(object instance, object[] inputs, out object[] outputs)
{
inputs = CleanInputs(inputs);
return _invoker.Invoke(instance, inputs, out outputs);
}
private static object[] CleanInputs(object[] inputs)
{
for(int i = 0; i < inputs.Length;i++)
{
var str = inputs[i] as string;
if(!string.IsNullOrEmpty(str))
inputs[i] = StripHTML(str);
}
return inputs;
}
public static string StripHTML(string input)
{
return Regex.Replace(input, "<.*?>", String.Empty);
}
}
然后实现行为:
public class CleanOperationBehavior: Attribute, IOperationBehavior
{
public void ApplyDispatchBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)
{
//Putting ourself in between dispatching invoker
dispatchOperation.Invoker = new CleanOperationInvoker(dispatchOperation.Invoker);
}
}
然后,只需像这样使用它:
[ServiceContract]
public interface IHackMeService
{
[OperationContract]
[CleanOperationBehavior]
int Get(string hack, string me, int beach);
}
或者您可以实施端点行为并将其附加到所有合同上的所有操作。顺便说一下,如果包含无效字符串,您甚至可以拒绝操作。只是抛出异常或什么的。
我没有编译它,所以如果你遇到任何错误,你可以告诉我,我会更新我的答案。
嗨eocron, 我已经实现了你的答案,但我在“CleanOperationInvoker”类,错误有两个错误在下面。 1)CacheOperationInvoker:方法必须有返回类型 2)只读字段不能分配到 请你看看它并更新你的答案,我急需它。 谢谢! –
您好,eocron,您能否给我提供实现端点行为的代码,并将其附加到所有合同上的所有操作中? –