Stavo convertendo un progetto Webapi C# in F # utilizzando i modelli F # ASP.NET. Tutto funziona alla grande, tranne i parametri di query opzionali. Continuo a ricevere questo erroreUtilizzo dei parametri di query facoltativi nel progetto A # Web Api
{
"message": "The request is invalid.",
"messageDetail": "The parameters dictionary contains an invalid entry for parameter 'start' for method 'System.Threading.Tasks.Task`1[System.Net.Http.HttpResponseMessage] GetVendorFiles(Int32, System.Nullable`1[System.DateTime])' in 'Thor.WebApi.VendorFilesController'. The dictionary contains a value of type 'System.Reflection.Missing', but the parameter requires a value of type 'System.Nullable`1[System.DateTime]'."
}
F # funzione di firma:
[<HttpGet; Route("")>]
member x.GetVendorFiles([<Optional; DefaultParameterValue(100)>] count, [<Optional; DefaultParameterValue(null)>] start : Nullable<DateTime>) =
C# funzione di firma:
[HttpGet]
[Route("")]
public async Task<HttpResponseMessage> GetVendorFiles(int count = 100,DateTime? start = null)
Qualcuno sa di alcuna soluzione alternativa?
Aggiornamento: Ho scoperto la causa di questo problema. ASP.NET estrae i valori predefiniti per le azioni del controller using ParameterInfo. Apparentemente il compilatore F # non compila i valori di default allo stesso modo di C# (anche con il DefaultParameterValueAttribute
)
Qual è il modo migliore o di lavorare intorno a questo? Potrebbe essere un filtro che devo iniettare o implementare il mio ParameterBinding
?
è possibile specificare i parametri predefiniti in una route specifica per il metodo controller? 'routes.MapRoute (nome:" Default ", url:" MyController/GetVendorFiles/{count}/{start} ", valori predefiniti: new {count = 100, start = (DateTime?) null});' – DLeh
@DLeh Not perché l'applicazione front-end esistente utilizza il conteggio e inizia come parametri di query (non i parametri del percorso), quindi mi piacerebbe che fosse compatibile con il codice esistente. Nel peggiore dei casi, posso cambiarlo in quello – Pavel
Ho appena notato che @Pavel ha sollevato questo problema come [problema Mvc] (https://github.com/aspnet/Mvc/issues/1923). Il problema contiene ulteriori discussioni e una soluzione alternativa. – bentayloruk