سلام.
من تو Application_Start یه تایمر گذاشتم. داخلش میخوام از Url.Action استفاده کنم که متاسفانه نمیشه.
کسی می تونه کمک کنه؟
سلام.
من تو Application_Start یه تایمر گذاشتم. داخلش میخوام از Url.Action استفاده کنم که متاسفانه نمیشه.
کسی می تونه کمک کنه؟
سلام
اگر فقط به مسیر یک اکشن در یک کنترلر نیاز دارید می توانید از این کد استفاده کنید:
UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("About", "Home", null);
اما اگر نیاز دارید یک تگ لینک کامل بسازید کد شما اینگونه خواهد بود:
string link = HtmlHelper.GenerateLink(this.ControllerContext.Req uestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null);
ممنون بابت وقتی که گذاشتین
در هر دو کد مشکل سر ControllerContext.RequestContext هست. خطای زیر رو میده:
'MvcApplication' does not contain a definition for 'ControllerContext' and no extension method 'ControllerContext' accepting a first argument of type 'MvcApplication' could be found (are you missing a using directive or an assembly reference?)
وقتی هم this رو از this.ControllerContext.RequestContext برمیدارم خطای زیر رو میده:
An object reference is required for the non-static field, method, or property 'ControllerContext.RequestContext'
با عرض پوزش. من دقت نکرده بودم جایی که میخواهید متد را فرخوانی کنید یک کنترلر نیست.
برای اینکه متدی برای حل مسئله تان داشته باشید که همه جا قابل فرخوانی باشد یک کلاس برایتان ساختم بنام Utils:
using System.Web;
using System.Web.Mvc;
namespace WebApplication3
{
public class Utils
{
public static string GetActionUrl(string action, string controller, object idParam,bool generateFullUrl = false)
{
var request = HttpContext.Current.Request;
string url = new UrlHelper(request.RequestContext).Action(action, controller,new {id = idParam });
if (generateFullUrl)
{
url = $"{request.Url.Scheme}://{request.Url.Authority}{url}";
}
return url;
}
}
}
نحوه فرخوانی به صورت عادی:
string url = Utils.GetActionUrl("Contact", "Home", null);
و اگر می خواهید در آدرسی که این متد باز می گرداند پروتکل (https یا http) و نیز آدرس سایت باشد متد فوق را به این صورت فراخوانی کنید:
string url = Utils.GetActionUrl("Contact", "Home", null,true);
تشکر بابت انجمن خوبتون
کجا فراخوانی اش کردید که null برگرداند؟کد زیر null بر می گردونه
در پروژه های وب، معمولا چون برنامه به ازای Request های دریافتی اجرا میشه عملا هیچ وقت نباید اون HttpContext.Current.Request باشه.
protected void Application_Start()
{
timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = 60000;
timer.Start();
timer.Elapsed += HandleTimerElapsed;
}
public void HandleTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if(...){
// create Link using url.action or ...
}
}
در HandleTimerElapsed میخوام از @Url.Action یا کد مشابهی استفاده کنم که url ام رو بسازم.
ای کاش به این تاپیک منم جواب می دادید
https://barnamenevis.org/showthread.p...8C%DA%AF%D8%B1
اولا رویداد Application_Start زمانی اجرا می شود که برنامه تازه می خواهد شروع به کار کند و بالطبع در لحظه شروع هنوز درخواستی به سوی برنامه ارسال نشده است.
ثانیا، Timer معمولا در یک Thread جدا از ASP.NET Worker Process اجرا می شود و از آنجاییکه این ترد بخشی از Http Pipeline محسوب نمی شود طبیعی است که Request/Response دسترسی نداشته باشد.
شما می خواهید دقیقا چکار کنید؟ هر 60 ثانیه یک بار یک لینک در کد ایجاد کنید؟
ممنون بابت وقتی که گذاشتین و پاسخ دادین.
داخل برنامه ام، reminder دارم. کاربرها میتونن مشخص کنن که برنامه سر تاریخ و ساعت مشخصی، بهشون notification یا اس ام اس بده برای یادآوری.
هر 1 دقیقه یکبار چک می کنم اگر کاربری تو اون تاریخ و ساعت ، reminder ست کرده بود sms یا notification ارسال بشه.
وقتی notification ارسال میشه، میخوام لینک page مورد نظر رو هم ارسال کنم که با کلیک بر روی notification، صفحه مورد نظر نمایش داده بشه
این کار رو به راحتی با Hangfire می توانید انجام دهید. برای ساختن لینک هم اگر به آبجکت Request دسترسی نداشتید لزومی ندارد از کدهایی که بالاتر گذاشتم استفاده کنید، به راحتی آنها را به شکل یک استرینگ در کدتان قرار دهید.
واقعا ممنونم من بیشتر وقتایی که سوالی دارم یا گیر میکنم توی این انجمن میتونم جوا پیدا کنم یا جواب بگیرم
ممنون لطف کردین موفق باشید
منم همینجور خیلی راضیم از این انجمن
خیلی ممنون از پاسخگوییتون
متشکرم ازتون بسیار انجمن خوب و پرکاربردی دارید
ممنون از پاسخگوییتون منم مشکل داشتم برطرف شد
خیلی ممنون از پاسخگوییتون پایدار و موفق باشید
این دوست عزیز هر سری یک یوزر ایجاد می کنه و میاد اینجا یه نظر بی ربط میده تا به وب سایتی که توی پروفایلش ثبت کرده بک لینک بده