Redirect to MVC

0

Witam,

Otóż mam następująca kontrolkę

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Threading.Tasks;
using Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Office365.OutlookServices;
using System.Web.Mvc;
using System.Web;



namespace DNSAP.API.Controllers
{
    public class ValuesController1 : ApiController
    {


        private static string[] scopes = { "https://outlook.office.com/mail.read" };
        public async Task<ActionResult> SignIn()
        {
            string authority = "https://login.microsoftonline.com/common";
            string clientId = System.Configuration.ConfigurationManager.AppSettings["ida:ClientID"];
            AuthenticationContext authContext = new AuthenticationContext(authority);

            // The url in our app that Azure should redirect to after successful signin
            Uri redirectUri = new Uri("#"); // TEMPORARY

            // Generate the parameterized URL for Azure signin
            Uri authUri = await authContext.GetAuthorizationRequestUrlAsync(scopes, null, clientId,
                redirectUri, UserIdentifier.AnyUser, null);
            string uri = authUri.ToString();
            // Redirect the browser to the Azure signin page
            return Redirect(uri);
        }
}
}

I tutaj mam problem z "return Redirect(uri);" ponieważ wyświetla mi błąd :
"Cannot implicitly convert type 'System.Web.Http.Result.RedirectResult' to 'System.Web.Mvc.ActionResult' '"

Czy ktoś może miał podobny problem? Lub wie jak go rozwiązać?

1

Hmm... To u mnie działa:

        public async Task<ActionResult> Index()
        {
	        return new RedirectResult("");
        }

Znaczy używasz RedirectResult nie z tego namespace'a co trzeba (używasz System.Web.Http.Result.RedirectResult, a powinieneś System.Web.Mvc.RedirectResult). O tyle to ciekawe, że używasz dziedziczonej z Controller metody Redirect, która powinna zwracać wszystko poprawnie z właściwych namespace'ów. Dolary przeciw orzechom, że nadpisałeś sobie gdzieś metodę Redirect w tej klasie lub klasie ApiController.

0

Dzięki wielkie pomogło ! :)
Jeśli chodzi o nadpisanie metody to właśnie nie mam jej napisanej ani w klasie nadrzędnej ani w klasie controllera.
Staram się utworzyć połączenie z API o365 przy użyciu OAuth2 i zapożyczam kod z :
https://dev.outlook.com/restapi/tutorial/dotnet

Jeszcze raz dzięki za szybką pomoc.

3

http://stackoverflow.com/questions/9494966/difference-between-apicontroller-and-controller-in-asp-net-mvc

Doczytałem, moje wnioski: ApiController nie służy do zwracania resultów, tylko do danych. Jeśli chcesz zwracać w kontrolerze dziedziczącym po ApiController cokolwiek innego niż dane, to robisz to źle. Dziedzicz w takim wypadku po klasie Controller. Api nie robi redirectów, api zwraca dane w określonym formacie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1