Queimaduras
Queimaduras
CC#
Created by Queimaduras on 5/1/2025 in #help
Parameter Binder error: implement TryParse
Hello. Even if I'm already implementing BindAsync in my custom Binder, I get an error saying I need to implement TryParse. If I remove the parameter from the route, then it simply will ignore it:
public class DecryptedId
{
public long Id { get; init; }

public static ValueTask<DecryptedId?> BindAsync(HttpContext httpContext, ParameterInfo parameter)
{
var encoder = httpContext.RequestServices.GetRequiredService<SqidsEncoder<long>>();

var routeId = httpContext.Request.RouteValues[parameter.Name!]?.ToString();

if (string.IsNullOrEmpty(routeId))
return ValueTask.FromResult<DecryptedId?>(null);

var decryptedId = encoder.Decode(routeId).Single();

var result = new DecryptedId
{
Id = decryptedId
};

return ValueTask.FromResult<DecryptedId?>(result);
}
}
public class DecryptedId
{
public long Id { get; init; }

public static ValueTask<DecryptedId?> BindAsync(HttpContext httpContext, ParameterInfo parameter)
{
var encoder = httpContext.RequestServices.GetRequiredService<SqidsEncoder<long>>();

var routeId = httpContext.Request.RouteValues[parameter.Name!]?.ToString();

if (string.IsNullOrEmpty(routeId))
return ValueTask.FromResult<DecryptedId?>(null);

var decryptedId = encoder.Decode(routeId).Single();

var result = new DecryptedId
{
Id = decryptedId
};

return ValueTask.FromResult<DecryptedId?>(result);
}
}
public void MapEndpoint(IEndpointRouteBuilder app)
{
app.MapGet("/works/{decryptedId}", async (
DecryptedId decryptedId,
IMediator mediator) =>
{
var result = await Handle(decryptedId.Id, mediator);
return result;
});
}
public void MapEndpoint(IEndpointRouteBuilder app)
{
app.MapGet("/works/{decryptedId}", async (
DecryptedId decryptedId,
IMediator mediator) =>
{
var result = await Handle(decryptedId.Id, mediator);
return result;
});
}
40 replies