2012-05-31 31 views
7

Tôi đang sử dụng api web asp.net mới và muốn chuyển các tham số tùy chọn, tôi tin rằng bạn cần điền một thuộc tính để nó cho phép tôi chuyển các tham số bằng cách sử dụng? Ký hiệu.asp.net webapi: cách chuyển các tham số tùy chọn?

Trước khi điều này được thực hiện với các mẫu uri tôi tin.

Có ai có ví dụ hay bất kỳ trợ giúp nào thực sự đánh giá cao hay không.

Tôi hiện đang đi qua các id trong url đó đến trong bộ điều khiển của tôi như int tôi muốn

Nhưng tôi cần phải vượt qua một vài cuộc hẹn

+0

Bạn có thể làm rõ thêm về kịch bản của mình không? Bạn mong đợi chữ ký phương thức hành động nào? Bạn đã thực hiện thay đổi định tuyến nào? Một số thông tin về các khái niệm cơ bản về định tuyến API Web có sẵn tại đây: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api – marcind

Trả lời

6

Bạn có thể làm cho một tham số tùy chọn bằng cách sử dụng một loại nullable:

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime? optionalDateTime) 
    { 
     return optionalDateTime.HasValue ? optionalDateTime.Value.ToLongDateString() : "No dateTime provided"; 
    } 
} 
+0

Cảm ơn Ian, làm việc tuyệt vời. – Martin

3

Ngoài các câu trả lời trước được cung cấp bởi Ian, đó là chính xác, bạn cũng có thể cung cấp các giá trị mặc định mà tôi cảm thấy là một lựa chọn sạch hơn mà tránh được việc phải kiểm tra xem một cái gì đó đã được thông qua hay không. Chỉ là một lựa chọn khác.

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime optionalDateTime = DateTime.UtcNow.Date) 
    {...} 
} 
+3

Tham số tùy chọn phải là hằng số biên dịch, DateTime KHÔNG BAO GIỜ là hằng số biên dịch. – frapontillo

+0

Rất tiếc, có bạn là chính xác. Một datetime không thể được cung cấp như một tham số tùy chọn và tôi không nên sử dụng nó làm ví dụ. Tuy nhiên, các kiểu dữ liệu khác có thể được sử dụng theo cách này. – AlexGad

+0

Trong dự án hiện tại của tôi, nếu tôi không cung cấp giá trị mặc định, tuyến đường không được giải quyết, trả lại lỗi HTTP 404 (Không tìm thấy). Chữ ký của phương thức phải là 'void MyAction (dài id, long? Value1 = -1, long? Value2 = -1)' ... Nếu tôi không cung cấp các giá trị mặc định thì nó không thành công nếu không được truyền vào chuỗi truy vấn! – Loudenvier

Các vấn đề liên quan