我希望将query
字符串转换为正确的值,我的query
字符串看起来像这样,
https://localhost:5001/Test?SampleId=14&Startdate=11%2F01%2F2020%2000%3A00%3A00&Enddate=11%2F29%2F2020%2000%3A00%3A00?culture=de
其Datetime
值,但如果我清理一点。
https://localhost:5001/Test?SampleId=14&Startdate=2020-01-01&Enddate=2020-02-01?culture=de
我的页面模型值:
[BindProperty(SupportsGet = true)]
public String SampleId { get; set; }
[BindProperty(SupportsGet = true)]
public DateTime Startdate { get; set; }
[BindProperty(SupportsGet = true)]
public DateTime Enddate { get; set; }
public async Task<IActionResult> OnGetAsync()
{
var datestart = Startdate; // Correct value
var dateend = Enddate; // Value 2020-02-01?culture=de. I don't want ?culture=de
...
...
}
我也尝试过:
@page "{SampleId:int}/{Startdate:datetime}/{Enddate:datetime}"
但它也不起作用。
我需要一些特殊的Property
才能正确转换吗?
我可以用string.Replace()
脱衣,但这不好!
答案 0 :(得分:0)
尝试在选择模型之前执行的OnPageHandlerSelected方法。您可以拦截请求,修复查询字符串并重定向。我认为您可能可以提出更好的解决方案,但这应该使您朝着正确的方向发展。请参阅这些资源以供参考。
https://www.learnrazorpages.com/razor-pages/filters
https://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Http.Extensions;
public override void OnPageHandlerSelected(PageHandlerSelectedContext context)
{
//...
var querystring = QueryHelpers.ParseQuery(context.HttpContext.Request.QueryString.Value);
var items = querystring.SelectMany(x => x.Value, (col, value) => new KeyValuePair<string, string>(col.Key, value)).ToList();
var endDate = items.FirstOrDefault(q => q.Key == "Enddate" && q.Value.Contains("?culture=de"));
if (!string.IsNullOrEmpty(endDate.Value))
{
items.Remove(endDate);
var newEndDateValue = endDate.Value.Replace("?culture=de", "");
var qb = new QueryBuilder(items);
qb.Add("Enddate", newEndDateValue);
Uri currentUrl = new Uri(HttpContext.Request.GetDisplayUrl());
var url = String.Format("{0}{1}{2}{3}", currentUrl.Scheme,Uri.SchemeDelimiter, currentUrl.Authority, currentUrl.AbsolutePath);
Response.Redirect(url.ToString() + "?" + qb.ToQueryString());
}
}