Automatically redirect to public view - asp.net

My ASP.NET Core app requires users to login. I created a public action method that allows anonymous users i.e.
[AllowAnonymous]
public IActionResult Public()
{
return View();
}
Because in my Startup.cs I require authentication, users are automatically redirected to the login page.
I want to change the behavior and redirect users to the public page automatically and let them click a link to login.
How do I redirect my users to the public page instead of the login page?

Just change default mapping in App_Start:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters*
new { controller = "Public", action = "Public",
id = UrlParameter.Optional }
);
UPDATE
After your comment I think this will answer your needs:
services.Configure<IdentityOptions>(options =>
{
options.Cookies.ApplicationCookie.LoginPath = new PathString("/Home/Public");
});
Add it to the ConfigureServices method in Startup.cs

Related

How to set another page as default page in ASPNET BOILERPLATE MVC5?

I'm trying change default page when I start my app, but I can't do it. When I start the first page is "Account/Login", but I need it changes to other pages.
In project web I'm doing this: * HomeController: Add HomePage actionResult * View/Home: Add View to Home with name HomePage
In app_start/routeconfig.cs
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "HomePage", id = UrlParameter.Optional } );
Also, i changed the properties of web project to specify page: Home/Homepage, but it's not working
Results in both options arent work
Template: Boilerplate with ASP.NET MVC 5 + Zero Module
i'm new with abp.
In HomeController.cs, comment out (or remove) the [AbpMvcAuthorize] attribute:
// [AbpMvcAuthorize]
public class HomeController : AbpProjectNameControllerBase
You can apply [AllowAnonymous] for specific actions to suppress authentication/authorization:
[AbpMvcAuthorize]
public class HomeController : AbpProjectNameControllerBase
{
public ActionResult Index()
{
return View();
}
[AllowAnonymous]
public ActionResult HomePage()
{
return View();
}
}
See the documentation on MVC Controllers.
Maybe it's better to use a different controller for anonymous actions. Create a new controller called WelcomeController. Do not add a AbpMvcAuthroize attribute. Then set your default route as Welcome/Index.

ASP.NET MVC 5 not seeing "{id}" route in controller

I've created a new ASP.NET MVC 5 project in Visual Studio 2015 Update 3, and everything is pretty standard. I have this controller:
public class UsersController : BaseController
{
[HttpGet]
public async Task<ActionResult> Newest()
{
var newestUsers = await Database.Users.OrderByDescending(u => u.ID).Take(100).ToListAsync();
return View(newestUsers);
}
[HttpGet]
[Route("{id}")]
public async Task<ActionResult> GetUser(long id)
{
var user = await Database.Users.FindAsync(id);
return View(user);
}
}
My BaseController derives from regular MVC Controller and it contains some common properties for my app. Nothing special.
When I go to /users/newest the appropriate page loads, but when I go to /users/1 I immediately get a 404 not found error. I've tried changing the route to ~/{id} but no avail. My route configuration is the standard, auto-generated one, I haven't touched it:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Why am not hitting the GetUser action?
UPDATE: For some reason, it started not working again. I didn't do anything. It was working after I've added routes.MapMvcAttributeRoutes();, it's still there but I started getting 404 again.
Okay I have no idea how it went away (or why it wasn't there) but I was missing the routes.MapMvcAttributeRoutes(); method in route configuration. Adding that method fixed the issue.
UPDATE: I've also needed to add RoutePrefix to get the routes working, and I have to explicitly add the correct route for any actions that have arguments. It's a pity that MVC can't map them by themselves.
Get ride of your additional Id routing above getuser - this isn't needed.
Your route is incorrect - it should be users/getuser/1

Create a link to redirect to the Web site Controller ActionResult from Web API

I need to send an email to the user for resetting password. Which contains a link to open the Password Reset page in Web site.
Both website & web api are in same domain.But different solutions.
I have created a link in web api.
var callbackUrl = Url.Link("ResetPassword", new { Controller = "Account", code = token });
But when it tested on postman it shows 'ResetPassword' could not be found in the route collection.
There is ResetPassword ActionResult in Account controller of Website.
[AllowAnonymous]
[Route(Name="ResetPassword")]
public ActionResult ResetPassword(string code)
{
return code == null ? View("Error") : View();
}
The RegisterRoutes method is,
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
I have not yet deployed the solution.
Will it work on deployment?
You've basically misplaced Route name with Action name. Please try to use this:
var callbackUrl = Url.Link("Default", new { Controller = "Account", Action ="ResetPassword", code = token });

Asp.Net routing to action with parameters

I have a routing config file with a following routing settings
routes.MapRoute(
name: "Login",
url: "Account/login/{username}/{password}",
defaults: new { controller = "Account", action = "Login"}
);
and I have a Login action in an Account Controller
[HttpPost]
public ActionResult Login(string username, string password)
{
// do some
}
[HttpGet]
public ActionResult Login()
{
//do some
}
I just want to call first action, with parameters not the second
Can you help me to fix this problem?
The first one is POST and second one is GET. So the HTTP verb which you use for calling will decide what gets called.

Redirect using routing in MVC

I have ASP.NET MVC application.
I want my application to redirect from
example.com/Register
to
example.com/Account/Register
How can I do it with routes? It makes little sense to me to make controller only for this one task
public class RegisterController : Controller
{
public ActionResult Index()
{
return RedirectToAction("Register", "Account");
}
}
You don't need a redirect. You need a custom route
Add this route first (above "Default")
routes.MapRoute(
"Register",
"Register",
new { controller = "Account", action = "Register" }
);
This solution will leave the user on URL example.com/Register, but instantiate Controller Account, execute ActionResult Register, and return View Account/Register.

Resources