Tôi đã chuyển đổi dự án C# webapi thành F # bằng cách sử dụng mẫu F # ASP.NET. Mọi thứ đều hoạt động tốt ngoại trừ các tham số truy vấn tùy chọn. Tôi cứ bị lỗi nàySử dụng tham số truy vấn tùy chọn trong dự án F # 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 # chức năng chữ ký:
[<HttpGet; Route("")>]
member x.GetVendorFiles([<Optional; DefaultParameterValue(100)>] count, [<Optional; DefaultParameterValue(null)>] start : Nullable<DateTime>) =
C# chức năng chữ ký:
[HttpGet]
[Route("")]
public async Task<HttpResponseMessage> GetVendorFiles(int count = 100,DateTime? start = null)
Có ai biết về bất kỳ cách giải quyết?
Đã cập nhật: Tôi đã tìm ra nguyên nhân của vấn đề này. ASP.NET trích xuất các giá trị mặc định cho các hoạt động của bộ điều khiển using ParameterInfo. Rõ ràng trình biên dịch F # không biên dịch các giá trị mặc định giống như C# (ngay cả với DefaultParameterValueAttribute
)
Cách tốt nhất hoặc làm việc xung quanh điều này là gì? Nó có phải là một số bộ lọc mà tôi cần phải tiêm hoặc thực hiện của riêng tôi ParameterBinding
?
bạn có thể chỉ định tham số mặc định trong một tuyến đường cụ thể cho phương pháp điều khiển không? 'routes.MapRoute (tên:" Mặc định ", url:" MyController/GetVendorFiles/{count}/{start} ", mặc định: new {count = 100, start = (DateTime?) null});' – DLeh
@DLeh Not thực sự vì ứng dụng giao diện người dùng hiện tại đang sử dụng tính và bắt đầu làm tham số truy vấn (không phải thông số tuyến đường) nên tôi muốn nó tương thích với mã hiện có. Trường hợp xấu nhất tôi có thể thay đổi nó thành rằng – Pavel
Chỉ cần nhận thấy rằng @Pavel đã nêu lên điều này như là một [vấn đề Mvc] (https://github.com/aspnet/Mvc/issues/1923). Vấn đề này có thêm thảo luận và cách giải quyết khác. – bentayloruk