This vlog demonstrates how to request the user for location permissions in runtime,
This code is applicable for Android version 23 (Marshmallow 6.0)

The source code is as shown below and if from James Montemagno post about runtime permissions
https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/

    #region RuntimePermissions

    async Task TryToGetPermissions()
    {
        if ((int)Build.VERSION.SdkInt >= 23)
        {
            await GetPermissionsAsync();
            return;
        }
    }
    const int RequestLocationId = 8889;

    readonly string[] PermissionsGroupLocation =
    {
        //TODO add more permissions
        Manifest.Permission.AccessCoarseLocation,
        Manifest.Permission.AccessFineLocation,
    };

    async Task GetPermissionsAsync()
    {
        const string permission = Manifest.Permission.AccessFineLocation;

        if (CheckSelfPermission(permission) == (int)Android.Content.PM.Permission.Granted)
        {
            //TODO change the message to show the permissions name
            Toast.MakeText(this, "Location permissions granted", ToastLength.Short).Show();
            return;
        }

        if (ShouldShowRequestPermissionRationale(permission))
        {
            //set alert for executing the task
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.SetTitle("Location Permissions");
            alert.SetMessage("The application needs your location permission to continue");
            alert.SetPositiveButton("Request Permissions", (senderAlert, args) =>
            {
                RequestPermissions(PermissionsGroupLocation, RequestLocationId);
            });

            alert.SetNegativeButton("Cancel", (senderAlert, args) =>
            {
                Toast.MakeText(this, "Cancelled!", ToastLength.Short).Show();
            });

            Dialog dialog = alert.Create();
            dialog.Show();

            return;
        }

        RequestPermissions(PermissionsGroupLocation, RequestLocationId);
    }

    public override async void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        switch (requestCode)
        {
            case RequestLocationId:
                {
                    if (grantResults[0] == (int)Android.Content.PM.Permission.Granted)
                    {
                        Toast.MakeText(this, "Location permissions granted", ToastLength.Short).Show();
                    }
                    else
                    {
                        Toast.MakeText(this, "Location permissions denied", ToastLength.Short).Show();        //Permission Denied
                    }
                }
                break;
        }
        //base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    #endregion