gpt4 book ai didi

ServiceStack httpReq.TryResolve>();没有正确解决?

转载 作者:行者123 更新时间:2023-12-04 04:42:54 25 4
gpt4 key购买 nike

我正在基于内置的 RegistrationService 实现我自己的用户注册服务,所以我复制了大部分内容,包括下面的前几行......

        if (EndpointHost.RequestFilters == null
|| !EndpointHost.RequestFilters.Contains(ValidationFilters.RequestFilter)) //Already gets run
RegistrationValidator.ValidateAndThrow(request, ApplyTo.Post);


// Above line does not get hit as there is the ValidationFilters.RequestFilter
//...but then the code should have previously run validation and failed?
//...Adding the following line causes the validation to run and fail when expected
//...but I should not required it as that is the point of the global ValidationFilters.RequestFilter??
RegistrationValidator.ValidateAndThrow(request, ApplyTo.Post);

据我了解, ValidationFilters.RequestFilter 应该更早被击中并且我的验证异常被抛出。

N.B:我把这条线放在了我的 apphost 配置的最后。
Plugins.Add(new ValidationFeature());

我正在成功注册我的验证器,其中:
container.Register<AbstractValidator<UserRegistration>>(new UserRegistrationValidator());

...我现在已将其范围缩小到 ValidatorCache.cs 中的以下几行 ServiceStack 源代码
public class ValidatorCache<T>
{
public static IValidator GetValidator(IHttpRequest httpReq)
{
return httpReq.TryResolve<IValidator<T>>();
}
}

... TryResolve 未找到验证器。

最佳答案

我发现验证器没有从 IOC 容器中解析……而不是深入研究,我退后一步,而是发现为什么自动注册方法以前对我不起作用。

原因是我原来有这个...

public interface IUserRegistrationValidator : IValidator<UserRegistration>
{
}

public class UserRegistrationValidator : AbstractValidator<UserRegistration>, IUserRegistrationValidator
{ //..etc

由于明显的原因(建议友好的异常(exception)),ServiceStack 代码在如下所示的线上跳闸:
    public static void RegisterValidator(this Container container, Type validator, ReuseScope scope=ReuseScope.None)
{
var baseType = validator.BaseType;
while (!baseType.IsGenericType) // WOULD FAIL ON THIS LINE HERE
{
baseType = baseType.BaseType;
}

var dtoType = baseType.GetGenericArguments()[0];
var validatorType = typeof(IValidator<>).MakeGenericType(dtoType);

container.RegisterAutoWiredType(validator, validatorType, scope);
}

在摆脱了我一直在玩的那些毫无意义的接口(interface)之后,我可以使用自动注册验证器的方法......例如:
container.RegisterValidators(typeof(UserRegistrationValidator).Assembly);

这解决了我的问题,我不确定如何从 https://github.com/ServiceStack/ServiceStack/wiki/Validation 手动注册 UserValidator并让它工作,因为我仍然有些印象,以下内容无法正常工作。
container.Register<AbstractValidator<User>>(new UserValidator());

...我当然可能错了!

关于ServiceStack httpReq.TryResolve<IValidator<T>>();没有正确解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com