のようなものを返すことが期待されます。
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」クラス、エラーで2つのエラーを得ました以下の通りです。 1)CacheOperationInvoker:メソッドの戻り値の型が である必要があります。2)読み取り専用フィールドを割り当てることができません。 あなたはそれを調べて答えを更新してください、私は緊急にそれを必要としますか? ありがとう! –
こんにちはeocron、エンドポイントの動作を実装するためのコードを私に提供して、すべての契約のすべての操作にそれを添付できますか? –