私は、IISでホストされているWebAPI2アプリケーション内で私の結合モデルを検証するための責任があるCreateAccountValidator
クラスを作成しました。それは私がデータベースにその事実を記録したいfalseを返す場合、私は、私のカスタムバリデータを呼び出していFluentValidationアクセスIOwinContext - 取得要求IPとアクセスApplicationDbContext
public class CreateAccountValidator : AbstractValidator<CreateAccountBindingModel>
{
public CreateAccountValidator()
{
RuleFor(u => u.Amount)
.Cascade(CascadeMode.StopOnFirstFailure)
.GreaterThan(0).WithMessage("Must be greater than 0");
RuleFor(u => u.FirstName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("Name is required")
.Length(3, 20).WithMessage("Name must be between 3 and 20 characters");
RuleFor(u => u.LastName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("Surname is required")
.Length(3, 20).WithMessage("Surname must be between 3 and 20 characters");
RuleFor(u => u.ID)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("ID is required")
.Must(ValidateId).WithMessage("ID is invalid");
}
private bool ValidateId(CreateAccountBindingModel createAccountBindingModel, string id, PropertyValidatorContext context)
{
var id_valid = IdValidator.IsValid(id);
if (!id_valid)
{
using (var db = new ApplicationDbContext())
{
//get request IP!!!
db.SaveAlert(createAccountBindingModel.UserEmail, "ID - CHECKSUM", string.Format("User entered: {0}", id), "192.100.100.100");
return false;
}
}
return true;
}
}
方法ValidateId
内部:
以下は私のクラスです。
は私がリクエストIPを取得する必要がありますが、私はそれを行うことができますどのように私は知りません。 IOwinContextプロパティまたはRequestプロパティはありません。アピコントローラ内部で私が呼んでいる:
Request.GetOwinContext().Get<ApplicationDbContext>()
私は自分のアプリケーション内のクラスからIOwinContextにアクセスすることはできますか?はいです、どうすればいいですか?
私は 'FluentValidation'でデータベースの検証を行うかどう知りません。それは正しいとは思わない。 'FluentValidation'はユーザ入力が有効であることを確認するための単純なガード句のセットのように思えます。あなたはDI注入し、クラスでそれを使用することができますので、第二に、あなたDIは、 'DbContext'とOWINコンテキストを提供する必要があります。 –
@CallumLinington私はちょうど '' Startup.cs'の中で 'app.CreatePerOwinContext(()=>新しいApplicationDbContext())を使用しています。 1つの場所ですべてを検証し、私の質問に示されているようにFluentValidationを使用している理由のすべてのエラーも記録したいと思います。だから、私は他のクラスの中のそのOWINコンテキストにどのようにアクセスできますか?私はDIシステムを使わなければならないのですか? – Misiu
'FluentValidationModelValidatorProvider.Configure(GlobalConfiguration.Configuration);' –