首页 > 解决方案 > 查询参数 web api 上的自定义验证属性

问题描述

我有以下控制器,它将字符串格式的 guid 作为查询参数。

我想在执行该方法之前验证它们是有效的 guid,但我不确定如何触发我的自定义 ValidationAttribute:

控制器.cs

public async Task<Profile> GetProfile([ValidGuid] string id)
{
    ...
}

ValidGuidAttribute.cs

internal class ValidGuidAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        try
        {
            Guid.Parse(value.ToString());
            return true;
        }
        catch (Exception e)
        {
            throw new InvalidIdException($"{value.ToString()} is an invalid id");
        }
    }
}

任何指出如何触发我的IsValid方法的帮助将不胜感激。

标签: asp.net-web-apicustom-attributesvalidationattribute

解决方案


您应该使用路由约束https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#路线约束

[Route("getprofile/{id:guid}")]
public async Task<Profile> GetProfile(string id)
{
    ...
}

推荐阅读