東西,你可以實現自己的操作調用:
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,您能否給我提供實現端點行爲的代碼,並將其附加到所有合同上的所有操作中? –